@mlopezlara90/react-scheduler 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +124 -0
  3. package/SchedulerComponent.d.ts +3 -0
  4. package/components/common/Cell.d.ts +14 -0
  5. package/components/common/LocaleArrow.d.ts +8 -0
  6. package/components/common/ResourceHeader.d.ts +6 -0
  7. package/components/common/Tabs.d.ts +16 -0
  8. package/components/common/TodayTypo.d.ts +8 -0
  9. package/components/common/WithResources.d.ts +6 -0
  10. package/components/events/Actions.d.ts +8 -0
  11. package/components/events/AgendaEventsList.d.ts +7 -0
  12. package/components/events/CurrentTimeBar.d.ts +9 -0
  13. package/components/events/EmptyAgenda.d.ts +2 -0
  14. package/components/events/EventItem.d.ts +10 -0
  15. package/components/events/EventItemPopover.d.ts +9 -0
  16. package/components/events/MonthEvents.d.ts +13 -0
  17. package/components/events/TodayEvents.d.ts +13 -0
  18. package/components/hoc/DateProvider.d.ts +5 -0
  19. package/components/inputs/DatePicker.d.ts +14 -0
  20. package/components/inputs/Input.d.ts +19 -0
  21. package/components/inputs/SelectInput.d.ts +22 -0
  22. package/components/month/MonthTable.d.ts +8 -0
  23. package/components/nav/DayDateBtn.d.ts +6 -0
  24. package/components/nav/MonthDateBtn.d.ts +6 -0
  25. package/components/nav/Navigation.d.ts +5 -0
  26. package/components/nav/WeekDateBtn.d.ts +8 -0
  27. package/components/week/WeekTable.d.ts +11 -0
  28. package/helpers/constants.d.ts +4 -0
  29. package/helpers/generals.d.ts +70 -0
  30. package/hooks/useArrowDisable.d.ts +5 -0
  31. package/hooks/useCellAttributes.d.ts +18 -0
  32. package/hooks/useDragAttributes.d.ts +10 -0
  33. package/hooks/useEventPermissions.d.ts +7 -0
  34. package/hooks/useIsClient.d.ts +2 -0
  35. package/hooks/useStore.d.ts +2 -0
  36. package/hooks/useSyncScroll.d.ts +8 -0
  37. package/hooks/useWindowResize.d.ts +5 -0
  38. package/index.d.ts +3 -0
  39. package/index.js +2812 -0
  40. package/package.json +65 -0
  41. package/positionManger/context.d.ts +14 -0
  42. package/positionManger/provider.d.ts +5 -0
  43. package/positionManger/usePosition.d.ts +4 -0
  44. package/store/context.d.ts +2 -0
  45. package/store/default.d.ts +233 -0
  46. package/store/provider.d.ts +7 -0
  47. package/store/types.d.ts +27 -0
  48. package/styles/styles.d.ts +22 -0
  49. package/types.d.ts +327 -0
  50. package/views/Day.d.ts +2 -0
  51. package/views/DayAgenda.d.ts +7 -0
  52. package/views/Editor.d.ts +11 -0
  53. package/views/Month.d.ts +2 -0
  54. package/views/MonthAgenda.d.ts +7 -0
  55. package/views/Week.d.ts +2 -0
  56. package/views/WeekAgenda.d.ts +8 -0
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@mlopezlara90/react-scheduler",
3
+ "version": "1.0.0",
4
+ "description": "React scheduler component based on Material-UI & date-fns",
5
+ "files": [
6
+ "*"
7
+ ],
8
+ "type": "module",
9
+ "exports": {
10
+ "./types": {
11
+ "import": "./types.d.ts"
12
+ },
13
+ ".": {
14
+ "import": "./index.js"
15
+ }
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/manuel90/react-scheduler.git"
20
+ },
21
+ "keywords": [
22
+ "react",
23
+ "material-ui",
24
+ "calendar",
25
+ "scheduler"
26
+ ],
27
+ "author": "Manuel",
28
+ "license": "MIT",
29
+ "bugs": {
30
+ "url": "https://github.com/manuel90/react-scheduler/issues"
31
+ },
32
+ "peerDependencies": {
33
+ "@mui/icons-material": ">=7.0.0",
34
+ "@mui/material": ">=7.0.0",
35
+ "@mui/x-date-pickers": ">=7.0.0 & <8.0.0",
36
+ "date-fns": ">=4.0.0",
37
+ "react": ">=18.0.0",
38
+ "react-dom": ">=18.0.0",
39
+ "rrule": ">=2.8.1"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "rrule": {
43
+ "optional": true
44
+ }
45
+ },
46
+ "eslintConfig": {
47
+ "extends": [
48
+ "react-app",
49
+ "react-app/jest"
50
+ ]
51
+ },
52
+ "browserslist": {
53
+ "production": [
54
+ ">0.2%",
55
+ "not dead",
56
+ "not op_mini all"
57
+ ],
58
+ "development": [
59
+ "last 1 chrome version",
60
+ "last 1 firefox version",
61
+ "last 1 safari version"
62
+ ]
63
+ },
64
+ "homepage": "https://github.com/manuel90/react-scheduler#readme"
65
+ }
@@ -0,0 +1,14 @@
1
+ export type PositionManagerState = {
2
+ renderedSlots: {
3
+ [day: string]: {
4
+ [resourceId: string]: {
5
+ [eventId: string]: number;
6
+ };
7
+ };
8
+ };
9
+ };
10
+ type PositionManagerProps = {
11
+ setRenderedSlot(day: string, eventId: string, position: number, resourceId?: string): void;
12
+ };
13
+ export declare const PositionContext: import('react').Context<PositionManagerState & PositionManagerProps>;
14
+ export {};
@@ -0,0 +1,5 @@
1
+ type Props = {
2
+ children: React.ReactNode;
3
+ };
4
+ export declare const PositionProvider: ({ children }: Props) => import("react/jsx-runtime").JSX.Element;
5
+ export {};
@@ -0,0 +1,4 @@
1
+ declare const usePosition: () => import('./context').PositionManagerState & {
2
+ setRenderedSlot(day: string, eventId: string, position: number, resourceId?: string): void;
3
+ };
4
+ export default usePosition;
@@ -0,0 +1,2 @@
1
+ import { Store } from './types';
2
+ export declare const StoreContext: import('react').Context<Store>;
@@ -0,0 +1,233 @@
1
+ import { SchedulerProps } from '../types';
2
+ export declare const defaultProps: (props: Partial<SchedulerProps>) => {
3
+ height: number;
4
+ alwaysShowAgendaDays?: boolean | undefined;
5
+ month: import('../types').MonthProps | null;
6
+ week: import('../types').WeekProps | null;
7
+ day: import('../types').DayProps | null;
8
+ navigation: boolean;
9
+ disableViewNavigator: boolean;
10
+ navigationPickerProps?: Partial<Omit<import('@mui/x-date-pickers').DateCalendarProps<Date>, "open" | "onClose" | "openTo" | "views" | "value" | "readOnly" | "onChange">> | undefined;
11
+ events: import('../types').ProcessedEvent[];
12
+ eventRenderer?: ((props: import('../types').EventRendererProps) => React.ReactNode | null) | undefined;
13
+ getRemoteEvents?: ((params: import('../types').RemoteQuery) => Promise<import('../types').ProcessedEvent[] | void>) | undefined;
14
+ fields: import('../types').FieldProps[];
15
+ loading: boolean;
16
+ loadingComponent?: import('react').ReactNode;
17
+ onConfirm: ((event: import('../types').ProcessedEvent, action: import('../types').EventActions) => Promise<import('../types').ProcessedEvent>) | undefined;
18
+ onDelete: ((deletedId: string | number) => Promise<string | number | void>) | undefined;
19
+ customEditor: ((scheduler: import('../types').SchedulerHelpers) => React.ReactNode) | undefined;
20
+ customViewer?: ((event: import('../types').ProcessedEvent, close: () => void) => React.ReactNode) | undefined;
21
+ viewerExtraComponent: string | number | bigint | boolean | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | null | undefined> | ((fields: import('../types').FieldProps[], event: import('../types').ProcessedEvent) => React.ReactNode) | null | undefined;
22
+ viewerTitleComponent?: ((event: import('../types').ProcessedEvent) => React.ReactNode) | undefined;
23
+ viewerSubtitleComponent?: ((event: import('../types').ProcessedEvent) => React.ReactNode) | undefined;
24
+ disableViewer?: boolean | undefined;
25
+ resources: import('../types').DefaultResource[];
26
+ resourceHeaderComponent: ((resource: import('../types').DefaultResource) => React.ReactNode) | undefined;
27
+ onResourceChange?: ((resource: import('../types').DefaultResource) => void) | undefined;
28
+ locale: import('date-fns').Locale;
29
+ timeZone?: string | undefined;
30
+ onEventDrop?: ((event: import('react').DragEvent<HTMLButtonElement>, droppedOn: Date, updatedEvent: import('../types').ProcessedEvent, originalEvent: import('../types').ProcessedEvent) => Promise<import('../types').ProcessedEvent | void>) | undefined;
31
+ onEventClick?: ((event: import('../types').ProcessedEvent) => void) | undefined;
32
+ onEventEdit?: ((event: import('../types').ProcessedEvent) => void) | undefined;
33
+ deletable: boolean;
34
+ editable: boolean;
35
+ draggable: boolean;
36
+ onSelectedDateChange?: ((date: Date) => void) | undefined;
37
+ onViewChange?: ((view: import('../components/nav/Navigation').View, agenda?: boolean) => void) | undefined;
38
+ stickyNavigation?: boolean | undefined;
39
+ onClickMore?: ((date: Date, gotToDay: (date: Date) => void) => void) | undefined;
40
+ onCellClick?: ((start: Date, end: Date, resourceKey?: string, resourceVal?: string | number) => void) | undefined;
41
+ translations: {
42
+ moreEvents: string;
43
+ loading: string;
44
+ noDataToDisplay: string;
45
+ validation?: {
46
+ required?: string;
47
+ invalidEmail?: string;
48
+ onlyNumbers?: string;
49
+ min?: string | ((min: number) => string);
50
+ max?: string | ((max: number) => string);
51
+ } | undefined;
52
+ navigation: {
53
+ month: string;
54
+ week: string;
55
+ day: string;
56
+ agenda: string;
57
+ today: string;
58
+ } & Record<import('../components/nav/Navigation').View, string> & {
59
+ today: string;
60
+ agenda: string;
61
+ };
62
+ form: {
63
+ addTitle: string;
64
+ editTitle: string;
65
+ confirm: string;
66
+ delete: string;
67
+ cancel: string;
68
+ } & {
69
+ addTitle: string;
70
+ editTitle: string;
71
+ confirm: string;
72
+ delete: string;
73
+ cancel: string;
74
+ };
75
+ event: {
76
+ title: string;
77
+ start: string;
78
+ end: string;
79
+ allDay: string;
80
+ } & Record<string, string> & {
81
+ title: string;
82
+ subtitle: string;
83
+ start: string;
84
+ end: string;
85
+ allDay: string;
86
+ };
87
+ };
88
+ resourceFields: {
89
+ idField: string;
90
+ textField: string;
91
+ subTextField: string;
92
+ avatarField: string;
93
+ colorField: string;
94
+ } & {
95
+ idField: string;
96
+ textField: string;
97
+ subTextField?: string;
98
+ avatarField?: string;
99
+ colorField?: string;
100
+ } & Record<string, string>;
101
+ view: import('../components/nav/Navigation').View;
102
+ selectedDate: Date;
103
+ resourceViewMode: "default" | "vertical" | "tabs";
104
+ direction: "rtl" | "ltr";
105
+ dialogMaxWidth: import('@mui/system').Breakpoint;
106
+ hourFormat: "12" | "24";
107
+ agenda: boolean | undefined;
108
+ enableAgenda: boolean;
109
+ navigationSlot: import('react').ReactNode;
110
+ };
111
+ export declare const initialStore: {
112
+ setProps: () => void;
113
+ dialog: boolean;
114
+ selectedRange: undefined;
115
+ selectedEvent: undefined;
116
+ selectedResource: undefined;
117
+ handleState: () => void;
118
+ getViews: () => never[];
119
+ toggleAgenda: () => void;
120
+ triggerDialog: () => void;
121
+ triggerLoading: () => void;
122
+ handleGotoDay: () => void;
123
+ confirmEvent: () => void;
124
+ setCurrentDragged: () => void;
125
+ onDrop: () => void;
126
+ height: number;
127
+ alwaysShowAgendaDays?: boolean | undefined;
128
+ month: import('../types').MonthProps | null;
129
+ week: import('../types').WeekProps | null;
130
+ day: import('../types').DayProps | null;
131
+ navigation: boolean;
132
+ disableViewNavigator: boolean;
133
+ navigationPickerProps?: Partial<Omit<import('@mui/x-date-pickers').DateCalendarProps<Date>, "open" | "onClose" | "openTo" | "views" | "value" | "readOnly" | "onChange">> | undefined;
134
+ events: import('../types').ProcessedEvent[];
135
+ eventRenderer?: ((props: import('../types').EventRendererProps) => React.ReactNode | null) | undefined;
136
+ getRemoteEvents?: ((params: import('../types').RemoteQuery) => Promise<import('../types').ProcessedEvent[] | void>) | undefined;
137
+ fields: import('../types').FieldProps[];
138
+ loading: boolean;
139
+ loadingComponent?: import('react').ReactNode;
140
+ onConfirm: ((event: import('../types').ProcessedEvent, action: import('../types').EventActions) => Promise<import('../types').ProcessedEvent>) | undefined;
141
+ onDelete: ((deletedId: string | number) => Promise<string | number | void>) | undefined;
142
+ customEditor: ((scheduler: import('../types').SchedulerHelpers) => React.ReactNode) | undefined;
143
+ customViewer?: ((event: import('../types').ProcessedEvent, close: () => void) => React.ReactNode) | undefined;
144
+ viewerExtraComponent: string | number | bigint | boolean | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | null | undefined> | ((fields: import('../types').FieldProps[], event: import('../types').ProcessedEvent) => React.ReactNode) | null | undefined;
145
+ viewerTitleComponent?: ((event: import('../types').ProcessedEvent) => React.ReactNode) | undefined;
146
+ viewerSubtitleComponent?: ((event: import('../types').ProcessedEvent) => React.ReactNode) | undefined;
147
+ disableViewer?: boolean | undefined;
148
+ resources: import('../types').DefaultResource[];
149
+ resourceHeaderComponent: ((resource: import('../types').DefaultResource) => React.ReactNode) | undefined;
150
+ onResourceChange?: ((resource: import('../types').DefaultResource) => void) | undefined;
151
+ locale: import('date-fns').Locale;
152
+ timeZone?: string | undefined;
153
+ onEventDrop?: ((event: import('react').DragEvent<HTMLButtonElement>, droppedOn: Date, updatedEvent: import('../types').ProcessedEvent, originalEvent: import('../types').ProcessedEvent) => Promise<import('../types').ProcessedEvent | void>) | undefined;
154
+ onEventClick?: ((event: import('../types').ProcessedEvent) => void) | undefined;
155
+ onEventEdit?: ((event: import('../types').ProcessedEvent) => void) | undefined;
156
+ deletable: boolean;
157
+ editable: boolean;
158
+ draggable: boolean;
159
+ onSelectedDateChange?: ((date: Date) => void) | undefined;
160
+ onViewChange?: ((view: import('../components/nav/Navigation').View, agenda?: boolean) => void) | undefined;
161
+ stickyNavigation?: boolean | undefined;
162
+ onClickMore?: ((date: Date, gotToDay: (date: Date) => void) => void) | undefined;
163
+ onCellClick?: ((start: Date, end: Date, resourceKey?: string, resourceVal?: string | number) => void) | undefined;
164
+ translations: {
165
+ moreEvents: string;
166
+ loading: string;
167
+ noDataToDisplay: string;
168
+ validation?: {
169
+ required?: string;
170
+ invalidEmail?: string;
171
+ onlyNumbers?: string;
172
+ min?: string | ((min: number) => string);
173
+ max?: string | ((max: number) => string);
174
+ } | undefined;
175
+ navigation: {
176
+ month: string;
177
+ week: string;
178
+ day: string;
179
+ agenda: string;
180
+ today: string;
181
+ } & Record<import('../components/nav/Navigation').View, string> & {
182
+ today: string;
183
+ agenda: string;
184
+ };
185
+ form: {
186
+ addTitle: string;
187
+ editTitle: string;
188
+ confirm: string;
189
+ delete: string;
190
+ cancel: string;
191
+ } & {
192
+ addTitle: string;
193
+ editTitle: string;
194
+ confirm: string;
195
+ delete: string;
196
+ cancel: string;
197
+ };
198
+ event: {
199
+ title: string;
200
+ start: string;
201
+ end: string;
202
+ allDay: string;
203
+ } & Record<string, string> & {
204
+ title: string;
205
+ subtitle: string;
206
+ start: string;
207
+ end: string;
208
+ allDay: string;
209
+ };
210
+ };
211
+ resourceFields: {
212
+ idField: string;
213
+ textField: string;
214
+ subTextField: string;
215
+ avatarField: string;
216
+ colorField: string;
217
+ } & {
218
+ idField: string;
219
+ textField: string;
220
+ subTextField?: string;
221
+ avatarField?: string;
222
+ colorField?: string;
223
+ } & Record<string, string>;
224
+ view: import('../components/nav/Navigation').View;
225
+ selectedDate: Date;
226
+ resourceViewMode: "default" | "vertical" | "tabs";
227
+ direction: "rtl" | "ltr";
228
+ dialogMaxWidth: import('@mui/system').Breakpoint;
229
+ hourFormat: "12" | "24";
230
+ agenda: boolean | undefined;
231
+ enableAgenda: boolean;
232
+ navigationSlot: import('react').ReactNode;
233
+ };
@@ -0,0 +1,7 @@
1
+ import { SchedulerProps } from '../types';
2
+ type Props = {
3
+ children: React.ReactNode;
4
+ initial: Partial<SchedulerProps>;
5
+ };
6
+ export declare const StoreProvider: ({ children, initial }: Props) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,27 @@
1
+ import { DragEvent } from 'react';
2
+ import { View } from '../components/nav/Navigation';
3
+ import { DefaultResource, EventActions, ProcessedEvent, SchedulerProps } from '../types';
4
+ export type SelectedRange = {
5
+ start: Date;
6
+ end: Date;
7
+ };
8
+ export interface SchedulerState extends SchedulerProps {
9
+ dialog: boolean;
10
+ selectedRange?: SelectedRange;
11
+ selectedEvent?: ProcessedEvent;
12
+ selectedResource?: DefaultResource["assignee"] | DefaultResource["assignee"][];
13
+ selectedTab?: DefaultResource["assignee"];
14
+ currentDragged?: ProcessedEvent;
15
+ enableAgenda?: boolean;
16
+ }
17
+ export interface Store extends SchedulerState {
18
+ handleState(value: SchedulerState[keyof SchedulerState], name: keyof SchedulerState): void;
19
+ getViews(): View[];
20
+ toggleAgenda: () => void;
21
+ triggerDialog(status: boolean, event?: SelectedRange | ProcessedEvent): void;
22
+ triggerLoading(status: boolean): void;
23
+ handleGotoDay(day: Date): void;
24
+ confirmEvent(event: ProcessedEvent | ProcessedEvent[], action: EventActions): void;
25
+ setCurrentDragged(event?: ProcessedEvent): void;
26
+ onDrop(event: DragEvent<HTMLButtonElement>, eventId: string, droppedStartTime: Date, resourceKey?: string, resourceVal?: string | number): void;
27
+ }
@@ -0,0 +1,22 @@
1
+ export declare const Wrapper: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
2
+ dialog: number;
3
+ }, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
4
+ export declare const Table: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
5
+ resource_count: number;
6
+ }, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
7
+ export declare const NavigationDiv: import('@emotion/styled').StyledComponent<import('@mui/material').PaperOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "children" | "classes" | "className" | "sx" | "style" | "square" | "elevation" | "variant"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
8
+ sticky?: string;
9
+ }, {}, {}>;
10
+ export declare const AgendaDiv: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
11
+ export declare const TableGrid: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
12
+ days: number;
13
+ sticky?: string;
14
+ stickyNavigation?: boolean;
15
+ indent?: string;
16
+ }, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
17
+ export declare const EventItemPaper: import('@emotion/styled').StyledComponent<import('@mui/material').PaperOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "children" | "classes" | "className" | "sx" | "style" | "square" | "elevation" | "variant"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & {
18
+ disabled?: boolean;
19
+ }, {}, {}>;
20
+ export declare const PopperInner: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
21
+ export declare const EventActions: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
22
+ export declare const TimeIndicatorBar: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;