mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 14:20:31 +00:00
Merge pull request #701 from bigcapitalhq/fix-disable-tabs-customize
fix: Disable tabs of the pdf customization if the first field not filed up
This commit is contained in:
@@ -51,8 +51,6 @@ export function BrandingTemplateForm<
|
|||||||
const { mutateAsync: editPdfTemplate } = useEditPdfTemplate();
|
const { mutateAsync: editPdfTemplate } = useEditPdfTemplate();
|
||||||
|
|
||||||
const initialValues = useBrandingTemplateFormInitialValues<T>(defaultValues);
|
const initialValues = useBrandingTemplateFormInitialValues<T>(defaultValues);
|
||||||
const brandingState = useBrandingState();
|
|
||||||
|
|
||||||
const [, setIsLoading] = useState<boolean>(false);
|
const [, setIsLoading] = useState<boolean>(false);
|
||||||
|
|
||||||
// Uploads the attachments.
|
// Uploads the attachments.
|
||||||
@@ -138,7 +136,6 @@ export function BrandingTemplateForm<
|
|||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={validationSchema}
|
validationSchema={validationSchema}
|
||||||
onSubmit={handleFormSubmit}
|
onSubmit={handleFormSubmit}
|
||||||
brandingState={brandingState || {}}
|
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import { ElementCustomizeFields } from './ElementCustomizeFields';
|
|||||||
import { ElementCustomizePreview } from './ElementCustomizePreview';
|
import { ElementCustomizePreview } from './ElementCustomizePreview';
|
||||||
import { extractChildren } from '@/utils/extract-children';
|
import { extractChildren } from '@/utils/extract-children';
|
||||||
import { ElementPreviewState } from '../BrandingTemplates/types';
|
import { ElementPreviewState } from '../BrandingTemplates/types';
|
||||||
|
import { TabProps } from '@blueprintjs/core';
|
||||||
|
import { useBrandingState } from '../BrandingTemplates/_utils';
|
||||||
|
|
||||||
export interface ElementCustomizeProps<T, Y>
|
export interface ElementCustomizeProps<T, Y>
|
||||||
extends ElementCustomizeFormProps<T, Y> {
|
extends ElementCustomizeFormProps<T, Y> {
|
||||||
@@ -17,13 +19,13 @@ export interface ElementCustomizeProps<T, Y>
|
|||||||
children?: React.ReactNode;
|
children?: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ElementCustomize<T, Y extends ElementPreviewState>({
|
export interface ElementCustomizeContentProps {
|
||||||
initialValues,
|
children?: React.ReactNode;
|
||||||
validationSchema,
|
}
|
||||||
brandingState,
|
|
||||||
onSubmit,
|
export function ElementCustomizeContent({
|
||||||
children,
|
children,
|
||||||
}: ElementCustomizeProps<T, Y>) {
|
}: ElementCustomizeContentProps) {
|
||||||
const PaperTemplate = React.useMemo(
|
const PaperTemplate = React.useMemo(
|
||||||
() => extractChildren(children, ElementCustomize.PaperTemplate),
|
() => extractChildren(children, ElementCustomize.PaperTemplate),
|
||||||
[children],
|
[children],
|
||||||
@@ -32,23 +34,34 @@ export function ElementCustomize<T, Y extends ElementPreviewState>({
|
|||||||
() => extractChildren(children, ElementCustomize.FieldsTab),
|
() => extractChildren(children, ElementCustomize.FieldsTab),
|
||||||
[children],
|
[children],
|
||||||
);
|
);
|
||||||
|
const brandingState = useBrandingState();
|
||||||
const value = { PaperTemplate, CustomizeTabs, brandingState };
|
const value = { PaperTemplate, CustomizeTabs, brandingState };
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeTabsControllerProvider>
|
||||||
|
<ElementCustomizeProvider value={value}>
|
||||||
|
<Group spacing={0} align="stretch">
|
||||||
|
<ElementCustomizeFields />
|
||||||
|
<ElementCustomizePreview />
|
||||||
|
</Group>
|
||||||
|
</ElementCustomizeProvider>
|
||||||
|
</ElementCustomizeTabsControllerProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ElementCustomize<T, Y extends ElementPreviewState>({
|
||||||
|
initialValues,
|
||||||
|
validationSchema,
|
||||||
|
onSubmit,
|
||||||
|
children,
|
||||||
|
}: ElementCustomizeProps<T, Y>) {
|
||||||
return (
|
return (
|
||||||
<ElementCustomizeForm
|
<ElementCustomizeForm
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={validationSchema}
|
validationSchema={validationSchema}
|
||||||
onSubmit={onSubmit}
|
onSubmit={onSubmit}
|
||||||
>
|
>
|
||||||
<ElementCustomizeTabsControllerProvider>
|
{children}
|
||||||
<ElementCustomizeProvider value={value}>
|
|
||||||
<Group spacing={0} align="stretch">
|
|
||||||
<ElementCustomizeFields />
|
|
||||||
<ElementCustomizePreview />
|
|
||||||
</Group>
|
|
||||||
</ElementCustomizeProvider>
|
|
||||||
</ElementCustomizeTabsControllerProvider>
|
|
||||||
</ElementCustomizeForm>
|
</ElementCustomizeForm>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -63,16 +76,17 @@ ElementCustomize.PaperTemplate = ({
|
|||||||
return <>{children}</>;
|
return <>{children}</>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface ElementCustomizeContentProps {
|
export interface ElementCustomizeFieldsTabProps {
|
||||||
id: string;
|
id: string;
|
||||||
label: string;
|
label: string;
|
||||||
children?: React.ReactNode;
|
children?: React.ReactNode;
|
||||||
|
tabProps?: Partial<TabProps>;
|
||||||
}
|
}
|
||||||
|
|
||||||
ElementCustomize.FieldsTab = ({
|
ElementCustomize.FieldsTab = ({
|
||||||
id,
|
id,
|
||||||
label,
|
label,
|
||||||
children,
|
children,
|
||||||
}: ElementCustomizeContentProps) => {
|
}: ElementCustomizeFieldsTabProps) => {
|
||||||
return <>{children}</>;
|
return <>{children}</>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Box, Stack } from '@/components';
|
import { Box, Stack } from '@/components';
|
||||||
import { Tab, Tabs } from '@blueprintjs/core';
|
import { Tab, TabProps, Tabs } from '@blueprintjs/core';
|
||||||
import { ElementCustomizeHeader } from './ElementCustomizeHeader';
|
import { ElementCustomizeHeader } from './ElementCustomizeHeader';
|
||||||
import {
|
import {
|
||||||
ElementCustomizeTabsEnum,
|
ElementCustomizeTabsEnum,
|
||||||
@@ -11,7 +11,6 @@ import styles from './ElementCustomizeTabs.module.scss';
|
|||||||
|
|
||||||
export function ElementCustomizeTabs() {
|
export function ElementCustomizeTabs() {
|
||||||
const { setCurrentTabId } = useElementCustomizeTabsController();
|
const { setCurrentTabId } = useElementCustomizeTabsController();
|
||||||
|
|
||||||
const { CustomizeTabs } = useElementCustomizeContext();
|
const { CustomizeTabs } = useElementCustomizeContext();
|
||||||
|
|
||||||
const tabItems = React.Children.map(CustomizeTabs, (node) => ({
|
const tabItems = React.Children.map(CustomizeTabs, (node) => ({
|
||||||
@@ -32,9 +31,19 @@ export function ElementCustomizeTabs() {
|
|||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
className={styles.tabsList}
|
className={styles.tabsList}
|
||||||
>
|
>
|
||||||
{tabItems?.map(({ id, label }: { id: string; label: string }) => (
|
{tabItems?.map(
|
||||||
<Tab id={id} key={id} title={label} />
|
({
|
||||||
))}
|
id,
|
||||||
|
label,
|
||||||
|
tabProps,
|
||||||
|
}: {
|
||||||
|
id: string;
|
||||||
|
label: string;
|
||||||
|
tabProps?: TabProps;
|
||||||
|
}) => (
|
||||||
|
<Tab id={id} key={id} title={label} {...tabProps} />
|
||||||
|
),
|
||||||
|
)}
|
||||||
</Tabs>
|
</Tabs>
|
||||||
</Box>
|
</Box>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
import { useFormikContext } from 'formik';
|
import { useFormikContext } from 'formik';
|
||||||
import { ElementCustomize } from '../../../ElementCustomize/ElementCustomize';
|
import {
|
||||||
|
ElementCustomize,
|
||||||
|
ElementCustomizeContent,
|
||||||
|
} from '../../../ElementCustomize/ElementCustomize';
|
||||||
import { CreditNoteCustomizeGeneralField } from './CreditNoteCustomizeGeneralFields';
|
import { CreditNoteCustomizeGeneralField } from './CreditNoteCustomizeGeneralFields';
|
||||||
import { CreditNoteCustomizeContentFields } from './CreditNoteCutomizeContentFields';
|
import { CreditNoteCustomizeContentFields } from './CreditNoteCutomizeContentFields';
|
||||||
import { CreditNotePaperTemplate, CreditNotePaperTemplateProps } from './CreditNotePaperTemplate';
|
import {
|
||||||
|
CreditNotePaperTemplate,
|
||||||
|
CreditNotePaperTemplateProps,
|
||||||
|
} from './CreditNotePaperTemplate';
|
||||||
import { CreditNoteBrandingState, CreditNoteCustomizeValues } from './types';
|
import { CreditNoteBrandingState, CreditNoteCustomizeValues } from './types';
|
||||||
import { initialValues } from './constants';
|
import { initialValues } from './constants';
|
||||||
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
||||||
import { useDrawerActions } from '@/hooks/state';
|
import { useDrawerActions } from '@/hooks/state';
|
||||||
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
||||||
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
||||||
|
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
|
||||||
|
|
||||||
export function CreditNoteCustomizeContent() {
|
export function CreditNoteCustomizeContent() {
|
||||||
const { payload, name } = useDrawerContext();
|
const { payload, name } = useDrawerContext();
|
||||||
@@ -27,6 +34,16 @@ export function CreditNoteCustomizeContent() {
|
|||||||
defaultValues={initialValues}
|
defaultValues={initialValues}
|
||||||
onSuccess={handleSuccess}
|
onSuccess={handleSuccess}
|
||||||
>
|
>
|
||||||
|
<CreditNoteCustomizeFormContent />
|
||||||
|
</BrandingTemplateForm>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function CreditNoteCustomizeFormContent() {
|
||||||
|
const isTemplateNameFilled = useIsTemplateNamedFilled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeContent>
|
||||||
<ElementCustomize.PaperTemplate>
|
<ElementCustomize.PaperTemplate>
|
||||||
<CreditNotePaperTemplateFormConnected />
|
<CreditNotePaperTemplateFormConnected />
|
||||||
</ElementCustomize.PaperTemplate>
|
</ElementCustomize.PaperTemplate>
|
||||||
@@ -35,10 +52,14 @@ export function CreditNoteCustomizeContent() {
|
|||||||
<CreditNoteCustomizeGeneralField />
|
<CreditNoteCustomizeGeneralField />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
|
|
||||||
<ElementCustomize.FieldsTab id={'content'} label={'Content'}>
|
<ElementCustomize.FieldsTab
|
||||||
|
id={'content'}
|
||||||
|
label={'Content'}
|
||||||
|
tabProps={{ disabled: !isTemplateNameFilled }}
|
||||||
|
>
|
||||||
<CreditNoteCustomizeContentFields />
|
<CreditNoteCustomizeContentFields />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
</BrandingTemplateForm>
|
</ElementCustomizeContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +67,10 @@ function CreditNotePaperTemplateFormConnected() {
|
|||||||
const { values } = useFormikContext<CreditNoteCustomizeValues>();
|
const { values } = useFormikContext<CreditNoteCustomizeValues>();
|
||||||
const { brandingState } = useElementCustomizeContext();
|
const { brandingState } = useElementCustomizeContext();
|
||||||
|
|
||||||
const mergedProps: CreditNotePaperTemplateProps = { ...brandingState, ...values };
|
const mergedProps: CreditNotePaperTemplateProps = {
|
||||||
|
...brandingState,
|
||||||
|
...values,
|
||||||
|
};
|
||||||
|
|
||||||
return <CreditNotePaperTemplate {...mergedProps} />;
|
return <CreditNotePaperTemplate {...mergedProps} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
import { useFormikContext } from 'formik';
|
import { useFormikContext } from 'formik';
|
||||||
import { ElementCustomize } from '../../../ElementCustomize/ElementCustomize';
|
import {
|
||||||
|
ElementCustomize,
|
||||||
|
ElementCustomizeContent,
|
||||||
|
} from '../../../ElementCustomize/ElementCustomize';
|
||||||
import { EstimateCustomizeGeneralField } from './EstimateCustomizeFieldsGeneral';
|
import { EstimateCustomizeGeneralField } from './EstimateCustomizeFieldsGeneral';
|
||||||
import { EstimateCustomizeContentFields } from './EstimateCustomizeFieldsContent';
|
import { EstimateCustomizeContentFields } from './EstimateCustomizeFieldsContent';
|
||||||
import { EstimatePaperTemplate, EstimatePaperTemplateProps } from './EstimatePaperTemplate';
|
import {
|
||||||
|
EstimatePaperTemplate,
|
||||||
|
EstimatePaperTemplateProps,
|
||||||
|
} from './EstimatePaperTemplate';
|
||||||
import { EstimateBrandingState, EstimateCustomizeValues } from './types';
|
import { EstimateBrandingState, EstimateCustomizeValues } from './types';
|
||||||
import { initialValues } from './constants';
|
import { initialValues } from './constants';
|
||||||
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
||||||
import { useDrawerActions } from '@/hooks/state';
|
import { useDrawerActions } from '@/hooks/state';
|
||||||
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
||||||
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
||||||
|
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
|
||||||
|
|
||||||
export function EstimateCustomizeContent() {
|
export function EstimateCustomizeContent() {
|
||||||
const { payload, name } = useDrawerContext();
|
const { payload, name } = useDrawerContext();
|
||||||
@@ -26,6 +33,16 @@ export function EstimateCustomizeContent() {
|
|||||||
onSuccess={handleSuccess}
|
onSuccess={handleSuccess}
|
||||||
resource={'SaleEstimate'}
|
resource={'SaleEstimate'}
|
||||||
>
|
>
|
||||||
|
<EstimateCustomizeFormContent />
|
||||||
|
</BrandingTemplateForm>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function EstimateCustomizeFormContent() {
|
||||||
|
const isTemplateNameFilled = useIsTemplateNamedFilled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeContent>
|
||||||
<ElementCustomize.PaperTemplate>
|
<ElementCustomize.PaperTemplate>
|
||||||
<EstimatePaperTemplateFormConnected />
|
<EstimatePaperTemplateFormConnected />
|
||||||
</ElementCustomize.PaperTemplate>
|
</ElementCustomize.PaperTemplate>
|
||||||
@@ -34,10 +51,14 @@ export function EstimateCustomizeContent() {
|
|||||||
<EstimateCustomizeGeneralField />
|
<EstimateCustomizeGeneralField />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
|
|
||||||
<ElementCustomize.FieldsTab id={'content'} label={'Content'}>
|
<ElementCustomize.FieldsTab
|
||||||
|
id={'content'}
|
||||||
|
label={'Content'}
|
||||||
|
tabProps={{ disabled: !isTemplateNameFilled }}
|
||||||
|
>
|
||||||
<EstimateCustomizeContentFields />
|
<EstimateCustomizeContentFields />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
</BrandingTemplateForm>
|
</ElementCustomizeContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,9 +68,12 @@ export function EstimateCustomizeContent() {
|
|||||||
*/
|
*/
|
||||||
function EstimatePaperTemplateFormConnected() {
|
function EstimatePaperTemplateFormConnected() {
|
||||||
const { values } = useFormikContext<EstimateCustomizeValues>();
|
const { values } = useFormikContext<EstimateCustomizeValues>();
|
||||||
const { brandingState } = useElementCustomizeContext()
|
const { brandingState } = useElementCustomizeContext();
|
||||||
|
|
||||||
const mergedProps: EstimatePaperTemplateProps = { ...brandingState, ...values, }
|
const mergedProps: EstimatePaperTemplateProps = {
|
||||||
|
...brandingState,
|
||||||
|
...values,
|
||||||
|
};
|
||||||
|
|
||||||
return <EstimatePaperTemplate {...mergedProps} />;
|
return <EstimatePaperTemplate {...mergedProps} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import {
|
|||||||
InvoicePaperTemplate,
|
InvoicePaperTemplate,
|
||||||
InvoicePaperTemplateProps,
|
InvoicePaperTemplateProps,
|
||||||
} from './InvoicePaperTemplate';
|
} from './InvoicePaperTemplate';
|
||||||
import { ElementCustomize } from '../../../ElementCustomize/ElementCustomize';
|
import {
|
||||||
|
ElementCustomize,
|
||||||
|
ElementCustomizeContent,
|
||||||
|
} from '../../../ElementCustomize/ElementCustomize';
|
||||||
import { InvoiceCustomizeGeneralField } from './InvoiceCustomizeGeneralFields';
|
import { InvoiceCustomizeGeneralField } from './InvoiceCustomizeGeneralFields';
|
||||||
import { InvoiceCustomizeContentFields } from './InvoiceCutomizeContentFields';
|
import { InvoiceCustomizeContentFields } from './InvoiceCutomizeContentFields';
|
||||||
import { InvoiceCustomizeFormValues, InvoiceCustomizeState } from './types';
|
import { InvoiceCustomizeFormValues, InvoiceCustomizeState } from './types';
|
||||||
@@ -13,11 +16,13 @@ import { InvoiceCustomizeSchema } from './InvoiceCustomizeForm.schema';
|
|||||||
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
||||||
import { useDrawerActions } from '@/hooks/state';
|
import { useDrawerActions } from '@/hooks/state';
|
||||||
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
||||||
import { initialValues } from './constants';
|
|
||||||
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
||||||
|
import { initialValues } from './constants';
|
||||||
|
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoice branding template customize.
|
* Invoice branding template customize.
|
||||||
|
* @return {JSX.Element}
|
||||||
*/
|
*/
|
||||||
export function InvoiceCustomizeContent() {
|
export function InvoiceCustomizeContent() {
|
||||||
const { payload, name } = useDrawerContext();
|
const { payload, name } = useDrawerContext();
|
||||||
@@ -36,6 +41,20 @@ export function InvoiceCustomizeContent() {
|
|||||||
onSuccess={handleSuccess}
|
onSuccess={handleSuccess}
|
||||||
resource={'SaleInvoice'}
|
resource={'SaleInvoice'}
|
||||||
>
|
>
|
||||||
|
<InvoiceCustomizeFormContent />
|
||||||
|
</BrandingTemplateForm>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoice branding template customize preview and fields.
|
||||||
|
* @returns {JSX.Element}
|
||||||
|
*/
|
||||||
|
function InvoiceCustomizeFormContent() {
|
||||||
|
const isTemplateNameFilled = useIsTemplateNamedFilled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeContent>
|
||||||
<ElementCustomize.PaperTemplate>
|
<ElementCustomize.PaperTemplate>
|
||||||
<InvoicePaperTemplateFormConnected />
|
<InvoicePaperTemplateFormConnected />
|
||||||
</ElementCustomize.PaperTemplate>
|
</ElementCustomize.PaperTemplate>
|
||||||
@@ -44,16 +63,20 @@ export function InvoiceCustomizeContent() {
|
|||||||
<InvoiceCustomizeGeneralField />
|
<InvoiceCustomizeGeneralField />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
|
|
||||||
<ElementCustomize.FieldsTab id={'content'} label={'Content'}>
|
<ElementCustomize.FieldsTab
|
||||||
|
id={'content'}
|
||||||
|
label={'Content'}
|
||||||
|
tabProps={{ disabled: !isTemplateNameFilled }}
|
||||||
|
>
|
||||||
<InvoiceCustomizeContentFields />
|
<InvoiceCustomizeContentFields />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
</BrandingTemplateForm>
|
</ElementCustomizeContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injects the `InvoicePaperTemplate` component props from the form and branding states.
|
* Injects the `InvoicePaperTemplate` component props from the form and branding states.
|
||||||
* @param Component
|
* @param Component
|
||||||
* @returns {JSX.Element}
|
* @returns {JSX.Element}
|
||||||
*/
|
*/
|
||||||
const withInvoicePreviewTemplateProps = <P extends object>(
|
const withInvoicePreviewTemplateProps = <P extends object>(
|
||||||
@@ -61,13 +84,17 @@ const withInvoicePreviewTemplateProps = <P extends object>(
|
|||||||
) => {
|
) => {
|
||||||
return (props: Omit<P, keyof InvoicePaperTemplateProps>) => {
|
return (props: Omit<P, keyof InvoicePaperTemplateProps>) => {
|
||||||
const { values } = useFormikContext<InvoiceCustomizeFormValues>();
|
const { values } = useFormikContext<InvoiceCustomizeFormValues>();
|
||||||
const { brandingState, } = useElementCustomizeContext();
|
const { brandingState } = useElementCustomizeContext();
|
||||||
|
|
||||||
const mergedProps: InvoicePaperTemplateProps = { ...brandingState, ...values };
|
const mergedProps: InvoicePaperTemplateProps = {
|
||||||
|
...brandingState,
|
||||||
|
...values,
|
||||||
|
};
|
||||||
|
|
||||||
return <Component {...(props as P)} {...mergedProps} />;
|
return <Component {...(props as P)} {...mergedProps} />;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const InvoicePaperTemplateFormConnected =
|
export const InvoicePaperTemplateFormConnected = R.compose(
|
||||||
R.compose(withInvoicePreviewTemplateProps)(InvoicePaperTemplate);
|
withInvoicePreviewTemplateProps,
|
||||||
|
)(InvoicePaperTemplate);
|
||||||
|
|||||||
@@ -1,14 +1,24 @@
|
|||||||
import { useFormikContext } from 'formik';
|
import { useFormikContext } from 'formik';
|
||||||
import { ElementCustomize } from '../../../ElementCustomize/ElementCustomize';
|
import {
|
||||||
|
ElementCustomize,
|
||||||
|
ElementCustomizeContent,
|
||||||
|
} from '../../../ElementCustomize/ElementCustomize';
|
||||||
import { PaymentReceivedCustomizeGeneralField } from './PaymentReceivedCustomizeFieldsGeneral';
|
import { PaymentReceivedCustomizeGeneralField } from './PaymentReceivedCustomizeFieldsGeneral';
|
||||||
import { PaymentReceivedCustomizeContentFields } from './PaymentReceivedCustomizeFieldsContent';
|
import { PaymentReceivedCustomizeContentFields } from './PaymentReceivedCustomizeFieldsContent';
|
||||||
import { PaymentReceivedCustomizeValues, PaymentReceivedPreviewState } from './types';
|
import {
|
||||||
import { PaymentReceivedPaperTemplate, PaymentReceivedPaperTemplateProps } from './PaymentReceivedPaperTemplate';
|
PaymentReceivedCustomizeValues,
|
||||||
|
PaymentReceivedPreviewState,
|
||||||
|
} from './types';
|
||||||
|
import {
|
||||||
|
PaymentReceivedPaperTemplate,
|
||||||
|
PaymentReceivedPaperTemplateProps,
|
||||||
|
} from './PaymentReceivedPaperTemplate';
|
||||||
import { initialValues } from './constants';
|
import { initialValues } from './constants';
|
||||||
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
||||||
import { useDrawerActions } from '@/hooks/state';
|
import { useDrawerActions } from '@/hooks/state';
|
||||||
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
||||||
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
||||||
|
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
|
||||||
|
|
||||||
export function PaymentReceivedCustomizeContent() {
|
export function PaymentReceivedCustomizeContent() {
|
||||||
const { payload, name } = useDrawerContext();
|
const { payload, name } = useDrawerContext();
|
||||||
@@ -21,12 +31,25 @@ export function PaymentReceivedCustomizeContent() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BrandingTemplateForm<PaymentReceivedCustomizeValues, PaymentReceivedPreviewState>
|
<BrandingTemplateForm<
|
||||||
|
PaymentReceivedCustomizeValues,
|
||||||
|
PaymentReceivedPreviewState
|
||||||
|
>
|
||||||
templateId={templateId}
|
templateId={templateId}
|
||||||
defaultValues={initialValues}
|
defaultValues={initialValues}
|
||||||
onSuccess={handleSuccess}
|
onSuccess={handleSuccess}
|
||||||
resource={'PaymentReceive'}
|
resource={'PaymentReceive'}
|
||||||
>
|
>
|
||||||
|
<PaymentReceivedCustomizeFormContent />
|
||||||
|
</BrandingTemplateForm>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function PaymentReceivedCustomizeFormContent() {
|
||||||
|
const isTemplateNameFilled = useIsTemplateNamedFilled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeContent>
|
||||||
<ElementCustomize.PaperTemplate>
|
<ElementCustomize.PaperTemplate>
|
||||||
<PaymentReceivedPaperTemplateFormConnected />
|
<PaymentReceivedPaperTemplateFormConnected />
|
||||||
</ElementCustomize.PaperTemplate>
|
</ElementCustomize.PaperTemplate>
|
||||||
@@ -35,10 +58,14 @@ export function PaymentReceivedCustomizeContent() {
|
|||||||
<PaymentReceivedCustomizeGeneralField />
|
<PaymentReceivedCustomizeGeneralField />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
|
|
||||||
<ElementCustomize.FieldsTab id={'content'} label={'Content'}>
|
<ElementCustomize.FieldsTab
|
||||||
|
id={'content'}
|
||||||
|
label={'Content'}
|
||||||
|
tabProps={{ disabled: !isTemplateNameFilled }}
|
||||||
|
>
|
||||||
<PaymentReceivedCustomizeContentFields />
|
<PaymentReceivedCustomizeContentFields />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
</BrandingTemplateForm>
|
</ElementCustomizeContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +73,10 @@ function PaymentReceivedPaperTemplateFormConnected() {
|
|||||||
const { values } = useFormikContext<PaymentReceivedCustomizeValues>();
|
const { values } = useFormikContext<PaymentReceivedCustomizeValues>();
|
||||||
const { brandingState } = useElementCustomizeContext();
|
const { brandingState } = useElementCustomizeContext();
|
||||||
|
|
||||||
const paperTemplateProps: PaymentReceivedPaperTemplateProps = { ...brandingState, ...values };
|
const paperTemplateProps: PaymentReceivedPaperTemplateProps = {
|
||||||
|
...brandingState,
|
||||||
|
...values,
|
||||||
|
};
|
||||||
|
|
||||||
return <PaymentReceivedPaperTemplate {...paperTemplateProps} />;
|
return <PaymentReceivedPaperTemplate {...paperTemplateProps} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
import { useFormikContext } from 'formik';
|
import { useFormikContext } from 'formik';
|
||||||
import { ElementCustomize } from '@/containers/ElementCustomize/ElementCustomize';
|
import {
|
||||||
|
ElementCustomize,
|
||||||
|
ElementCustomizeContent,
|
||||||
|
} from '@/containers/ElementCustomize/ElementCustomize';
|
||||||
import { ReceiptCustomizeGeneralField } from './ReceiptCustomizeFieldsGeneral';
|
import { ReceiptCustomizeGeneralField } from './ReceiptCustomizeFieldsGeneral';
|
||||||
import { ReceiptCustomizeFieldsContent } from './ReceiptCustomizeFieldsContent';
|
import { ReceiptCustomizeFieldsContent } from './ReceiptCustomizeFieldsContent';
|
||||||
import { ReceiptPaperTemplate, ReceiptPaperTemplateProps } from './ReceiptPaperTemplate';
|
import {
|
||||||
|
ReceiptPaperTemplate,
|
||||||
|
ReceiptPaperTemplateProps,
|
||||||
|
} from './ReceiptPaperTemplate';
|
||||||
import { EstimateBrandingState, ReceiptCustomizeValues } from './types';
|
import { EstimateBrandingState, ReceiptCustomizeValues } from './types';
|
||||||
import { initialValues } from './constants';
|
import { initialValues } from './constants';
|
||||||
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
import { BrandingTemplateForm } from '@/containers/BrandingTemplates/BrandingTemplateForm';
|
||||||
import { useDrawerActions } from '@/hooks/state';
|
import { useDrawerActions } from '@/hooks/state';
|
||||||
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
import { useDrawerContext } from '@/components/Drawer/DrawerProvider';
|
||||||
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
import { useElementCustomizeContext } from '@/containers/ElementCustomize/ElementCustomizeProvider';
|
||||||
|
import { useIsTemplateNamedFilled } from '@/containers/BrandingTemplates/utils';
|
||||||
|
|
||||||
export function ReceiptCustomizeContent() {
|
export function ReceiptCustomizeContent() {
|
||||||
const { payload, name } = useDrawerContext();
|
const { payload, name } = useDrawerContext();
|
||||||
@@ -26,6 +33,16 @@ export function ReceiptCustomizeContent() {
|
|||||||
defaultValues={initialValues}
|
defaultValues={initialValues}
|
||||||
onSuccess={handleFormSuccess}
|
onSuccess={handleFormSuccess}
|
||||||
>
|
>
|
||||||
|
<ReceiptCustomizeFormContent />
|
||||||
|
</BrandingTemplateForm>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ReceiptCustomizeFormContent() {
|
||||||
|
const isTemplateNameFilled = useIsTemplateNamedFilled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ElementCustomizeContent>
|
||||||
<ElementCustomize.PaperTemplate>
|
<ElementCustomize.PaperTemplate>
|
||||||
<ReceiptPaperTemplateFormConnected />
|
<ReceiptPaperTemplateFormConnected />
|
||||||
</ElementCustomize.PaperTemplate>
|
</ElementCustomize.PaperTemplate>
|
||||||
@@ -34,10 +51,14 @@ export function ReceiptCustomizeContent() {
|
|||||||
<ReceiptCustomizeGeneralField />
|
<ReceiptCustomizeGeneralField />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
|
|
||||||
<ElementCustomize.FieldsTab id={'content'} label={'Content'}>
|
<ElementCustomize.FieldsTab
|
||||||
|
id={'content'}
|
||||||
|
label={'Content'}
|
||||||
|
tabProps={{ disabled: !isTemplateNameFilled }}
|
||||||
|
>
|
||||||
<ReceiptCustomizeFieldsContent />
|
<ReceiptCustomizeFieldsContent />
|
||||||
</ElementCustomize.FieldsTab>
|
</ElementCustomize.FieldsTab>
|
||||||
</BrandingTemplateForm>
|
</ElementCustomizeContent>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +66,10 @@ function ReceiptPaperTemplateFormConnected() {
|
|||||||
const { values } = useFormikContext<ReceiptCustomizeValues>();
|
const { values } = useFormikContext<ReceiptCustomizeValues>();
|
||||||
const { brandingState } = useElementCustomizeContext();
|
const { brandingState } = useElementCustomizeContext();
|
||||||
|
|
||||||
const mergedProps: ReceiptPaperTemplateProps = { ...brandingState, ...values, };
|
const mergedProps: ReceiptPaperTemplateProps = {
|
||||||
|
...brandingState,
|
||||||
|
...values,
|
||||||
|
};
|
||||||
|
|
||||||
return <ReceiptPaperTemplate {...mergedProps} />;
|
return <ReceiptPaperTemplate {...mergedProps} />;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user