docs: create docs workspace (#5174)

* docs: migrate ui docs to docs universe

* created yarn workspace

* added eslint and tsconfig configurations

* fix eslint configurations

* fixed eslint configurations

* shared tailwind configurations

* added shared ui package

* added more shared components

* migrating more components

* made details components shared

* move InlineCode component

* moved InputText

* moved Loading component

* Moved Modal component

* moved Select components

* Moved Tooltip component

* moved Search components

* moved ColorMode provider

* Moved Notification components and providers

* used icons package

* use UI colors in api-reference

* moved Navbar component

* used Navbar and Search in UI docs

* added Feedback to UI docs

* general enhancements

* fix color mode

* added copy colors file from ui-preset

* added features and enhancements to UI docs

* move Sidebar component and provider

* general fixes and preparations for deployment

* update docusaurus version

* adjusted versions

* fix output directory

* remove rootDirectory property

* fix yarn.lock

* moved code component

* added vale for all docs MD and MDX

* fix tests

* fix vale error

* fix deployment errors

* change ignore commands

* add output directory

* fix docs test

* general fixes

* content fixes

* fix announcement script

* added changeset

* fix vale checks

* added nofilter option

* fix vale error
This commit is contained in:
Shahed Nasser
2023-09-21 20:57:15 +03:00
committed by GitHub
parent 19c5d5ba36
commit fa7c94b4cc
3209 changed files with 32188 additions and 31018 deletions
@@ -0,0 +1,135 @@
"use client"
import React, { createContext, useContext, useReducer } from "react"
import { NotificationItemProps, NotificationContainer } from "@/components"
import uuid from "react-uuid"
export type NotificationItemType = {
id?: string
} & NotificationItemProps
export type NotificationContextType = {
notifications: NotificationItemType[]
addNotification: (value: NotificationItemType) => void
generateId: () => string
removeNotification: (id: string) => void
updateNotification: (
id: string,
updatedData: Partial<Omit<NotificationItemType, "id">>
) => void
}
export enum NotificationReducerActionTypes {
ADD = "add",
REMOVE = "remove",
UPDATE = "update",
}
export type NotificationReducerAction =
| {
type: NotificationReducerActionTypes.ADD
notification: NotificationItemType
}
| {
type: NotificationReducerActionTypes.REMOVE
id: string
}
| {
type: NotificationReducerActionTypes.UPDATE
id: string
updatedData: Partial<Omit<NotificationItemType, "id">>
}
const notificationReducer = (
state: NotificationItemType[],
action: NotificationReducerAction
) => {
switch (action.type) {
case NotificationReducerActionTypes.ADD:
return [...state, action.notification]
case NotificationReducerActionTypes.REMOVE:
return state.filter((notification) => notification.id !== action.id)
case NotificationReducerActionTypes.UPDATE:
return state.map((notification) => {
if (notification.id === action.id) {
return {
...notification,
...action.updatedData,
}
}
return notification
})
default:
return state
}
}
const NotificationContext = createContext<NotificationContextType | null>(null)
export type NotificationProviderProps = {
children?: React.ReactNode
}
export const NotificationProvider = ({
children,
}: NotificationProviderProps) => {
const [notifications, dispatch] = useReducer(notificationReducer, [])
const generateId = () => uuid()
const addNotification = (notification: NotificationItemType) => {
if (!notification.id) {
notification.id = generateId()
}
dispatch({
type: NotificationReducerActionTypes.ADD,
notification,
})
}
const updateNotification = (
id: string,
updatedData: Partial<Omit<NotificationItemType, "id">>
) => {
dispatch({
type: NotificationReducerActionTypes.UPDATE,
id,
updatedData,
})
}
const removeNotification = (id: string) => {
dispatch({
type: NotificationReducerActionTypes.REMOVE,
id,
})
}
return (
<NotificationContext.Provider
value={{
notifications,
addNotification,
generateId,
removeNotification,
updateNotification,
}}
>
{children}
<NotificationContainer />
</NotificationContext.Provider>
)
}
export const useNotifications = (): NotificationContextType => {
const context = useContext(NotificationContext)
if (!context) {
throw new Error(
"useNotifications must be used within a NotificationProvider"
)
}
return context
}