react-crud-mui 0.2.47 → 0.2.49

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.
@@ -4,10 +4,11 @@ import { UseFormReturn } from '../../form/hooks/useForm';
4
4
  import { CloseReason } from '../../page/Page';
5
5
  import { DetailPageCommandsFlag } from '../hooks/useDetailPageStates';
6
6
  import { NeedDataReason } from '../pages/DetailPageContent';
7
- import { SaveMode } from '../pages/DetailPageData';
7
+ import { NavigationDirection, SaveMode } from '../pages/DetailPageData';
8
8
  import { StepPane } from './DetailPageStepsHeader';
9
9
  export type DetailPageStandartCommandsOptions = {
10
10
  saveCommandMode?: SaveMode;
11
+ reason: NeedDataReason;
11
12
  };
12
13
  export type DetailPageStepCommandsOptions = {
13
14
  nextButtonTitle?: React.ReactNode;
@@ -32,6 +33,7 @@ export type DetailPageStandartCommandsEvents = {
32
33
  onDelete?: () => void;
33
34
  onClose?: (reason?: CloseReason) => void;
34
35
  onSaveClose?: () => void;
36
+ onNavigate?: (direction: NavigationDirection) => void;
35
37
  };
36
38
  export type DetailPageStepCommandsEvents = {
37
39
  onNextClick?: () => void;
@@ -1,14 +1,16 @@
1
1
  import { ReactNode } from 'react';
2
+ import { FieldValues } from 'react-hook-form';
2
3
  import { NeedDataReason } from '../pages/DetailPageContent';
3
- export type DetailPageLayoutOptions = {
4
+ export type DetailPageLayoutOptions<TModel extends FieldValues = FieldValues> = {
4
5
  loading?: boolean;
5
6
  reason: NeedDataReason;
7
+ data?: TModel;
6
8
  };
7
- export type DetailPageLayoutProps = {
9
+ export type DetailPageLayoutProps<TModel extends FieldValues = FieldValues> = {
8
10
  content?: ReactNode;
9
11
  stepsContent?: ReactNode;
10
12
  autoSaveContent?: ReactNode;
11
- options: DetailPageLayoutOptions;
13
+ options: DetailPageLayoutOptions<TModel>;
12
14
  };
13
15
  type DetailPageDefaultLayoutProps = DetailPageLayoutProps;
14
16
  declare function DetailPageDefaultLayout({ content, stepsContent, autoSaveContent, }: DetailPageDefaultLayoutProps): import("react/jsx-runtime").JSX.Element;
@@ -6,5 +6,5 @@ export type DetailPageContextType<TModel extends FieldValues = FieldValues> = Pi
6
6
  setActiveSegmentIndex: (index: number) => void;
7
7
  };
8
8
  export declare const DetailPageContext: React.Context<DetailPageContextType<FieldValues> | null>;
9
- declare function DetailPageProvider({ children, data, reason, loading, enableCopy, enableCreate, enableClose, enableDiscardChanges, enableDelete, onSave, enableSave, disabled, activeSegmentIndex, setActiveSegmentIndex, }: PropsWithChildren & DetailPageContextType): import("react/jsx-runtime").JSX.Element;
9
+ declare function DetailPageProvider<TModel extends FieldValues = FieldValues>({ children, data, reason, loading, enableCopy, enableCreate, enableClose, enableDiscardChanges, enableDelete, onSave, enableSave, disabled, activeSegmentIndex, setActiveSegmentIndex, }: PropsWithChildren & DetailPageContextType<TModel>): import("react/jsx-runtime").JSX.Element;
10
10
  export default DetailPageProvider;
@@ -1,5 +1,6 @@
1
1
  import { FieldValues } from 'react-hook-form';
2
2
  import { NeedDataReason } from '../pages/DetailPageContent';
3
+ import { NavigatePayload } from '../pages/DetailPageData';
3
4
  import { DetailPageModalProps } from '../pages/DetailPageModal';
4
5
  export type SelectedModelOptions<TModel extends FieldValues> = Pick<DetailPageModalProps<TModel>, 'reason' | 'data' | 'disabled' | 'onAfterSave' | 'onAfterDelete'>;
5
6
  type HelperModelFields = {
@@ -17,6 +18,7 @@ export interface UseDetailPageModalProps {
17
18
  declare function useDetailPageModal<TModel extends FieldValues>({ models, uniqueIdParamName, }?: UseDetailPageModalProps): readonly [({ data, disabled, reason, onAfterDelete, onAfterSave }?: SelectedModelOptions<TModel>) => void, {
18
19
  readonly onReasonChange: (reason: NeedDataReason) => void;
19
20
  readonly onClose: () => void;
21
+ readonly onNavigate: ({ direction }: Pick<NavigatePayload<TModel>, "direction">) => void;
20
22
  readonly modalProps?: Omit<import('../../..').ModalProps, "children" | "open">;
21
23
  readonly open?: boolean;
22
24
  readonly promptOptions?: import('./useFormPrompt').UseFormPromptProps;
@@ -418,6 +420,7 @@ declare function useDetailPageModal<TModel extends FieldValues>({ models, unique
418
420
  readonly component?: React.ElementType;
419
421
  readonly disabled?: boolean;
420
422
  readonly loading?: boolean;
423
+ readonly readOnly?: boolean;
421
424
  readonly size?: import('../../page/components/PageProvider').PaddingSize;
422
425
  readonly icon?: import('react').ReactNode;
423
426
  readonly rightContent?: import('react').ReactNode;
@@ -464,15 +467,15 @@ declare function useDetailPageModal<TModel extends FieldValues>({ models, unique
464
467
  readonly onCreate?: () => void;
465
468
  readonly onSave?: import('../pages/DetailPageData').DataEvent<TModel, import('../pages/DetailPageData').SavePayload<TModel>> | undefined;
466
469
  readonly onDiscardChanges?: () => void;
467
- readonly onContentLayout?: (props: import('../components/DetailPageDefaultLayout').DetailPageLayoutProps) => React.ReactNode;
468
- readonly onWrapperLayout?: (props: import('../pages/DetailPageContent').DetailPageWrapperLayoutProps) => React.ReactNode;
470
+ readonly onContentLayout?: ((props: import('../components/DetailPageDefaultLayout').DetailPageLayoutProps<TModel>) => React.ReactNode) | undefined;
471
+ readonly onWrapperLayout?: ((props: import('../pages/DetailPageContent').DetailPageWrapperLayoutProps<TModel>) => React.ReactNode) | undefined;
469
472
  readonly defaultSaveMode?: import('../pages/DetailPageData').SaveMode;
470
473
  readonly steps?: import('../components/DetailPageStepsHeader').StepPane<TModel>[] | undefined;
471
474
  readonly customSteps?: React.ComponentType<import('../components/DetailPageStepsHeader').DetailPageStepsHeaderProps>;
472
475
  readonly stepsProps?: Partial<import('../components/DetailPageStepsHeader').DetailPageStepsHeaderProps>;
473
- readonly showSuccessMessages?: boolean;
474
- readonly onAfterSave?: ((result: void | Awaited<TModel> | undefined, variables: import('../pages/DetailPageData').SavePayload<TModel>, form: import('../../form/hooks/useForm').UseFormReturn<TModel>) => void) | undefined;
475
476
  readonly onAfterDelete?: ((variables: import('../pages/DetailPageData').DeletePayload<TModel>, form: import('../../form/hooks/useForm').UseFormReturn<TModel>) => void) | undefined;
477
+ readonly onAfterSave?: ((result: void | Awaited<TModel> | undefined, variables: import('../pages/DetailPageData').SavePayload<TModel>, form: import('../../form/hooks/useForm').UseFormReturn<TModel>) => void) | undefined;
478
+ readonly showSuccessMessages?: boolean;
476
479
  readonly uid?: string;
477
480
  readonly index?: number;
478
481
  }];
@@ -6,16 +6,17 @@ import { PageProps } from '../../page/Page';
6
6
  import { ServerError } from '../../utils';
7
7
  import { AutoSaveOptions } from '../components/AutoSave';
8
8
  import { CommandsProps, CommandsPropsFn, DetailPageCommandsProps } from '../components/DetailPageCommands';
9
- import { DetailPageLayoutProps } from '../components/DetailPageDefaultLayout';
9
+ import { DetailPageLayoutOptions, DetailPageLayoutProps } from '../components/DetailPageDefaultLayout';
10
10
  import { DetailPageHeaderProps } from '../components/DetailPageHeader';
11
11
  import { DetailPageStepsHeaderProps, StepPane } from '../components/DetailPageStepsHeader';
12
- import { SaveMode } from './DetailPageData';
12
+ import { NavigationDirection, SaveMode } from './DetailPageData';
13
13
  export type NeedDataReason = 'create' | 'fetch' | 'copy' | 'view';
14
- export type DetailPageWrapperLayoutProps = {
14
+ export type DetailPageWrapperLayoutProps<TModel extends FieldValues = FieldValues> = {
15
15
  content: ReactNode;
16
16
  pageContent: ReactNode;
17
17
  commandsContent: ReactNode;
18
18
  alertsContent: ReactNode;
19
+ options: DetailPageLayoutOptions<TModel>;
19
20
  };
20
21
  export interface DetailPageContentProps<TModel extends FieldValues> extends Omit<PageProps, 'commandsContent' | 'alertsContent' | 'autoSave' | 'onHeader' | 'tabExtraContent'> {
21
22
  commandsProps?: CommandsProps | CommandsPropsFn;
@@ -84,6 +85,10 @@ export interface DetailPageContentProps<TModel extends FieldValues> extends Omit
84
85
  * Delete event
85
86
  */
86
87
  onDelete: () => void;
88
+ /**
89
+ * Navigation callback when one of which navigate buttons is pressed
90
+ */
91
+ onNavigate: (direction: NavigationDirection) => void;
87
92
  /**
88
93
  * Custom header function
89
94
  */
@@ -120,11 +125,15 @@ export interface DetailPageContentProps<TModel extends FieldValues> extends Omit
120
125
  * Having called "onSave" once changing form values
121
126
  */
122
127
  autoSave?: boolean | AutoSaveOptions;
128
+ /**
129
+ * Readonly mode, when true all commands are disabled except commands unlike disabled
130
+ */
131
+ readOnly?: boolean;
123
132
  /**
124
133
  * Custom content layout
125
134
  */
126
- onContentLayout?: (props: DetailPageLayoutProps) => React.ReactNode;
127
- onWrapperLayout?: (props: DetailPageWrapperLayoutProps) => React.ReactNode;
135
+ onContentLayout?: (props: DetailPageLayoutProps<TModel>) => React.ReactNode;
136
+ onWrapperLayout?: (props: DetailPageWrapperLayoutProps<TModel>) => React.ReactNode;
128
137
  /**
129
138
  *Default save mode (save,saveclose,savecreate) default is 'save'
130
139
  */
@@ -143,5 +152,5 @@ export interface DetailPageContentProps<TModel extends FieldValues> extends Omit
143
152
  stepsProps?: Partial<DetailPageStepsHeaderProps>;
144
153
  tabExtraContent?: ReactNode | ((data?: TModel) => ReactNode);
145
154
  }
146
- declare function DetailPageContent<TModel extends FieldValues>({ activeSegmentIndex, alerts, autoSave, children, commandsPosition, commandsProps, customSteps: CustomSteps, data, defaultSaveMode, disabled, disableShortCuts, enableClose, enableCopy, enableCreate, enableDelete, enableDiscardChanges, enableSave, error, form, hotkeyScopes, loading, onClose, onCommands, onContentLayout, onCopy, onCreate, onDelete, onDiscardChanges, onSegmentChanged, onExtraCommands, onHeader, onSave, onSaveClose, onSaveCreate, onWrapperLayout, reason, showHeader, steps, stepsProps, tabExtraContent, ...pageProps }: DetailPageContentProps<TModel>): import("react/jsx-runtime").JSX.Element;
155
+ declare function DetailPageContent<TModel extends FieldValues>({ activeSegmentIndex, alerts, autoSave, children, commandsPosition, commandsProps, customSteps: CustomSteps, data, defaultSaveMode, disabled, disableShortCuts, enableClose, enableCopy, enableCreate, enableDelete, enableDiscardChanges, enableSave, error, form, hotkeyScopes, loading, onClose, onCommands, onContentLayout, onCopy, onCreate, onDelete, onDiscardChanges, onSegmentChanged, onExtraCommands, onHeader, onNavigate, onSave, onSaveClose, onSaveCreate, onWrapperLayout, readOnly, reason, showHeader, steps, stepsProps, tabExtraContent, ...pageProps }: DetailPageContentProps<TModel>): import("react/jsx-runtime").JSX.Element;
147
156
  export default DetailPageContent;
@@ -18,12 +18,22 @@ export interface DeletePayload<TModel extends FieldValues = FieldValues> extends
18
18
  model: TModel;
19
19
  data?: TModel;
20
20
  }
21
- export interface DetailPageDataProps<TModel extends FieldValues> extends Omit<DetailPageContentProps<TModel>, 'onSave' | 'onDelete' | 'onDiscardChanges' | 'onCopy' | 'onSaveCreate' | 'onSaveClose'> {
21
+ export interface NavigatePayload<TModel extends FieldValues = FieldValues> extends BasePayload {
22
+ direction: NavigationDirection;
23
+ model: TModel;
24
+ }
25
+ export type NavigationDirection = 'next' | 'prev';
26
+ export interface DetailPageDataProps<TModel extends FieldValues> extends Omit<DetailPageContentProps<TModel>, 'onSave' | 'onDelete' | 'onDiscardChanges' | 'onCopy' | 'onSaveCreate' | 'onSaveClose' | 'onNavigate'> {
22
27
  /**
23
28
  * Save event
24
29
  * @returns if returns data,either in promise or object will bind to form data
25
30
  */
26
31
  onSave?: DataEvent<TModel, SavePayload<TModel>>;
32
+ /**
33
+ * Navigation buttons event when navigation is active
34
+ * @returns if returns data,either in promise or object will bind to form data
35
+ */
36
+ onNavigate?: DataEvent<TModel, NavigatePayload<TModel>>;
27
37
  /**
28
38
  * Delete event
29
39
  * @returns if returns data,either in promise or object will bind to form data
@@ -53,5 +63,5 @@ export interface DetailPageDataProps<TModel extends FieldValues> extends Omit<De
53
63
  /**
54
64
  * Page component that all data manupulation is handled
55
65
  */
56
- declare function DetailPageData<TModel extends FieldValues>({ alerts, autoSave, data, error, form, loading, onAfterDelete, onAfterSave, onClose, onDelete, onDiscardChanges, onReasonChange, onSave, reason, showSuccessMessages, ...dpProps }: DetailPageDataProps<TModel>): import("react/jsx-runtime").JSX.Element;
66
+ declare function DetailPageData<TModel extends FieldValues>({ alerts, autoSave, data, error, form, loading, onAfterDelete, onAfterSave, onClose, onDelete, onDiscardChanges, onReasonChange, onNavigate, onSave, reason, showSuccessMessages, ...dpProps }: DetailPageDataProps<TModel>): import("react/jsx-runtime").JSX.Element;
57
67
  export default DetailPageData;
@@ -0,0 +1,22 @@
1
+ import { default as React, PropsWithChildren } from 'react';
2
+ import { FieldValues } from 'react-hook-form';
3
+ import { NeedDataReason } from '../../detail-page/pages/DetailPageContent';
4
+ import { ListPageProps } from '../pages/ListPage';
5
+ export type ListPageContextType<TModel extends FieldValues = FieldValues> = {
6
+ data?: TModel[];
7
+ /**
8
+ * Clear all form controls in filter
9
+ */
10
+ clear: () => void;
11
+ /**
12
+ * Trigger search with defined filter criterias
13
+ */
14
+ search: () => void;
15
+ /**
16
+ * Used for built in detailpage opener
17
+ */
18
+ triggerAction: (reason: NeedDataReason, data?: TModel) => void;
19
+ } & Pick<ListPageProps<TModel>, 'loading' | 'enableClear' | 'enableCreateItem' | 'enableExport' | 'enableSearch'>;
20
+ export declare const ListPageContext: React.Context<ListPageContextType<any> | null>;
21
+ declare function ListPageProvider<TModel extends FieldValues = FieldValues>({ children, data, loading, enableClear, enableCreateItem, enableExport, enableSearch, search: onSearch, clear: onClear, triggerAction, }: PropsWithChildren & ListPageContextType<TModel>): import("react/jsx-runtime").JSX.Element;
22
+ export default ListPageProvider;
@@ -1,22 +1,4 @@
1
- import { default as React } from 'react';
2
1
  import { FieldValues } from 'react-hook-form';
3
- import { NeedDataReason } from '../../detail-page/pages/DetailPageContent';
4
- import { ListPageProps } from '../pages/ListPage';
5
- export type ListPageContextType<TModel extends FieldValues> = {
6
- data?: TModel[];
7
- /**
8
- * Clear all form controls in filter
9
- */
10
- clear: () => void;
11
- /**
12
- * Trigger search with defined filter criterias
13
- */
14
- search: () => void;
15
- /**
16
- * Used for built in detailpage opener
17
- */
18
- triggerAction: (reason: NeedDataReason, data?: TModel) => void;
19
- } & Pick<ListPageProps<TModel>, 'loading' | 'enableClear' | 'enableCreateItem' | 'enableExport' | 'enableSearch'>;
20
- export declare const ListPageContext: React.Context<ListPageContextType<any> | null>;
2
+ import { ListPageContextType } from '../components/ListPageProvider';
21
3
  declare const useListPage: <TModel extends FieldValues>() => ListPageContextType<TModel>;
22
4
  export default useListPage;