@homefile/components-v2 2.7.34 → 2.8.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 (51) hide show
  1. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormFooter.d.ts +2 -0
  2. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormFooter.js +13 -0
  3. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormPanel.d.ts +3 -0
  4. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormPanel.js +6 -0
  5. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormTabImage.d.ts +2 -0
  6. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormTabImage.js +9 -0
  7. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormTabs.d.ts +2 -0
  8. package/dist/components/forms/dynamicForm/ItemFormPanel/ItemFormTabs.js +29 -0
  9. package/dist/components/forms/dynamicForm/ItemFormPanel/index.d.ts +4 -0
  10. package/dist/components/forms/dynamicForm/ItemFormPanel/index.js +4 -0
  11. package/dist/components/forms/dynamicForm/index.d.ts +1 -0
  12. package/dist/components/forms/dynamicForm/index.js +1 -0
  13. package/dist/components/householdItems/ItemNameHeader.d.ts +1 -1
  14. package/dist/components/householdItems/ItemNameHeader.js +7 -2
  15. package/dist/interfaces/forms/ItemFormPanel/ItemFormFooter.interface.d.ts +4 -0
  16. package/dist/interfaces/forms/ItemFormPanel/ItemFormFooter.interface.js +1 -0
  17. package/dist/interfaces/forms/ItemFormPanel/ItemFormPanel.interface.d.ts +9 -0
  18. package/dist/interfaces/forms/ItemFormPanel/ItemFormPanel.interface.js +1 -0
  19. package/dist/interfaces/forms/ItemFormPanel/ItemFormTabImage.interface.d.ts +12 -0
  20. package/dist/interfaces/forms/ItemFormPanel/ItemFormTabImage.interface.js +1 -0
  21. package/dist/interfaces/forms/ItemFormPanel/ItemFormTabs.interface.d.ts +4 -0
  22. package/dist/interfaces/forms/ItemFormPanel/ItemFormTabs.interface.js +1 -0
  23. package/dist/interfaces/forms/ItemFormPanel/index.d.ts +4 -0
  24. package/dist/interfaces/forms/ItemFormPanel/index.js +4 -0
  25. package/dist/interfaces/forms/index.d.ts +1 -0
  26. package/dist/interfaces/forms/index.js +1 -0
  27. package/dist/interfaces/headers/ItemNameHeader.interface.d.ts +2 -3
  28. package/dist/stories/contacts/ContactsContent.stories.js +1 -0
  29. package/dist/stories/forms/ItemFormPanel/ItemFormPanel.stories.d.ts +5 -0
  30. package/dist/stories/forms/ItemFormPanel/ItemFormPanel.stories.js +20 -0
  31. package/dist/stories/forms/ItemFormPanel/ItemFormTabs.stories.d.ts +5 -0
  32. package/dist/stories/forms/ItemFormPanel/ItemFormTabs.stories.js +26 -0
  33. package/package.json +1 -1
  34. package/src/components/forms/dynamicForm/ItemFormPanel/ItemFormFooter.tsx +15 -0
  35. package/src/components/forms/dynamicForm/ItemFormPanel/ItemFormPanel.tsx +62 -0
  36. package/src/components/forms/dynamicForm/ItemFormPanel/ItemFormTabImage.tsx +35 -0
  37. package/src/components/forms/dynamicForm/ItemFormPanel/ItemFormTabs.tsx +22 -0
  38. package/src/components/forms/dynamicForm/ItemFormPanel/index.ts +4 -0
  39. package/src/components/forms/dynamicForm/index.ts +1 -0
  40. package/src/components/householdItems/ItemNameHeader.tsx +11 -7
  41. package/src/interfaces/forms/ItemFormPanel/ItemFormFooter.interface.ts +4 -0
  42. package/src/interfaces/forms/ItemFormPanel/ItemFormPanel.interface.ts +9 -0
  43. package/src/interfaces/forms/ItemFormPanel/ItemFormTabImage.interface.ts +13 -0
  44. package/src/interfaces/forms/ItemFormPanel/ItemFormTabs.interface.ts +5 -0
  45. package/src/interfaces/forms/ItemFormPanel/index.ts +4 -0
  46. package/src/interfaces/forms/index.ts +1 -0
  47. package/src/interfaces/headers/ItemNameHeader.interface.ts +2 -3
  48. package/src/stories/contacts/ContactsContent.stories.tsx +1 -0
  49. package/src/stories/forms/ItemFormPanel/ItemFormPanel.stories.tsx +29 -0
  50. package/src/stories/forms/ItemFormPanel/ItemFormTabs.stories.tsx +33 -0
  51. package/src/stories/householdItems/AddHomeItemHeader.stories.tsx +0 -1
@@ -0,0 +1,2 @@
1
+ import { FormFooterI } from '../../../../interfaces';
2
+ export declare const ItemFormFooter: ({ onSave, onCancel }: FormFooterI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { t } from 'i18next';
3
+ import { FooterButtons } from '../../..';
4
+ export const ItemFormFooter = ({ onSave, onCancel }) => {
5
+ const buttonsFooter = {
6
+ button1: {
7
+ buttonStyle: 'primaryFooter',
8
+ label: t('buttons.save'),
9
+ onClick: onSave,
10
+ },
11
+ };
12
+ return _jsx(FooterButtons, { button1: buttonsFooter.button1 });
13
+ };
@@ -0,0 +1,3 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { ItemFormPanelI } from '../../../../interfaces';
3
+ export declare const ItemFormPanel: ({ children, itemName, onClose, onSaveItemName, onSubmitForm, panelIcon, panelTitle, showFooter, }: PropsWithChildren<ItemFormPanelI>) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DrawerBody, DrawerHeader, DrawerContent, DrawerFooter, Box, } from '@chakra-ui/react';
3
+ import { PanelHeader, FooterDrawer, ItemNameHeader, ItemFormFooter, Overlay, } from '../../..';
4
+ export const ItemFormPanel = ({ children, itemName, onClose, onSaveItemName, onSubmitForm, panelIcon, panelTitle, showFooter = false, }) => {
5
+ return (_jsxs(DrawerContent, { bg: "lightBlue.1", zIndex: 4, children: [_jsx(DrawerHeader, { p: "0", children: _jsx(PanelHeader, { handleCloseButton: onClose, icon: panelIcon, title: panelTitle }) }), _jsxs(DrawerBody, { padding: "0", bg: "lightBlue.1", children: [_jsx(ItemNameHeader, { id: "item-name", onSave: onSaveItemName, value: itemName }), _jsx(Box, { position: "relative", children: _jsx(Overlay, { showOverlay: !itemName, position: "absolute", w: "inherit", h: "inherit", zIndex: "9" }) }), children] }), _jsx(FooterDrawer, { isOpen: showFooter, children: _jsx(DrawerFooter, { w: "100%", children: _jsx(ItemFormFooter, { onSave: onSubmitForm, onCancel: onClose }) }) })] }));
6
+ };
@@ -0,0 +1,2 @@
1
+ import { ItemFormTabImageI } from '../../../../interfaces';
2
+ export declare const ItemFormTabImage: ({ reportId, showHeader, isLoading, images, uploading, onDelete, onEdit, onUpload, onOpen, }: ItemFormTabImageI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Center, Text } from '@chakra-ui/react';
3
+ import { AddMedia } from '../../..';
4
+ export const ItemFormTabImage = ({ reportId = '', showHeader = true, isLoading = false, images = [], uploading = false, onDelete = () => null, onEdit = () => null, onUpload = () => null, onOpen = () => null, }) => {
5
+ if (!reportId) {
6
+ return (_jsx(Center, { h: "300px", children: _jsx(Text, { fontFamily: "secondary", children: "Please save form to add images." }) }));
7
+ }
8
+ return (_jsx(AddMedia, { showHeader: showHeader, loading: isLoading, images: images, uploading: uploading, handleDelete: onDelete, handleEdit: onEdit, handleUpload: onUpload, handleOpen: onOpen }));
9
+ };
@@ -0,0 +1,2 @@
1
+ import { ItemFormTabsI } from '../../../../interfaces';
2
+ export declare const ItemFormTabs: ({ form, ...props }: ItemFormTabsI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,29 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { t } from 'i18next';
14
+ import { Box } from '@chakra-ui/react';
15
+ import { DynamicForm, TabsHeader, ItemFormTabImage } from '../../..';
16
+ export const ItemFormTabs = (_a) => {
17
+ var { form = [] } = _a, props = __rest(_a, ["form"]);
18
+ const tabList = [
19
+ {
20
+ label: t('createDocument.tabs.tab1'),
21
+ component: (_jsx(Box, { overflow: "scroll", minH: "100vh", children: _jsx(DynamicForm, { form: form }) })),
22
+ },
23
+ {
24
+ label: t('createDocument.tabs.tab2'),
25
+ component: _jsx(ItemFormTabImage, Object.assign({}, props)),
26
+ },
27
+ ];
28
+ return _jsx(TabsHeader, { tabList: tabList });
29
+ };
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter';
2
+ export * from './ItemFormPanel';
3
+ export * from './ItemFormTabImage';
4
+ export * from './ItemFormTabs';
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter';
2
+ export * from './ItemFormPanel';
3
+ export * from './ItemFormTabImage';
4
+ export * from './ItemFormTabs';
@@ -1,4 +1,5 @@
1
1
  export * from './fields';
2
+ export * from './ItemFormPanel';
2
3
  export * from './DynamicForm';
3
4
  export * from './SimpleDynamicForm';
4
5
  export * from './HiddenField';
@@ -1,4 +1,5 @@
1
1
  export * from './fields';
2
+ export * from './ItemFormPanel';
2
3
  export * from './DynamicForm';
3
4
  export * from './SimpleDynamicForm';
4
5
  export * from './HiddenField';
@@ -1,2 +1,2 @@
1
1
  import { ItemNameHeaderI } from '../../interfaces';
2
- export declare const ItemNameHeader: ({ id, handleChange, value, handleSave, padding, }: ItemNameHeaderI) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const ItemNameHeader: ({ id, value, onSave, padding, }: ItemNameHeaderI) => import("react/jsx-runtime").JSX.Element;
@@ -3,6 +3,11 @@ import { t } from 'i18next';
3
3
  import { Box, Flex, Button } from '@chakra-ui/react';
4
4
  import { TextInput } from '..';
5
5
  import { isEmptyField } from '../../utils';
6
- export const ItemNameHeader = ({ id = '', handleChange, value, handleSave, padding = 'base', }) => {
7
- return (_jsx(Box, { bg: "lightBlue.2", p: padding, w: "100%", children: _jsxs(Flex, { gap: "base", align: "center", children: [_jsx(TextInput, { errorMessage: `${t('householdItems.headers.itemName')} ${t('forms.required')}`, hasError: isEmptyField(value), id: id, handleChange: handleChange, placeholder: t('householdItems.headers.placeholder'), value: value }), value && (_jsx(Button, { variant: "secondary", maxW: "fit-content", maxH: "input.md", onClick: handleSave, children: t('createDocument.buttons.save') }))] }) }));
6
+ import { useState } from 'react';
7
+ export const ItemNameHeader = ({ id = '', value = '', onSave, padding = 'base', }) => {
8
+ const [name, setName] = useState(value);
9
+ const handleChange = (e) => {
10
+ setName(e.target.value);
11
+ };
12
+ return (_jsx(Box, { bg: "lightBlue.2", p: padding, w: "100%", children: _jsxs(Flex, { gap: "base", align: "center", children: [_jsx(TextInput, { errorMessage: `${t('householdItems.headers.itemName')} ${t('forms.required')}`, hasError: isEmptyField(name), id: id, handleChange: handleChange, placeholder: t('householdItems.headers.placeholder'), value: name }), name && (_jsx(Button, { variant: "secondary", maxW: "fit-content", maxH: "input.md", onClick: () => onSave(name), children: t('createDocument.buttons.save') }))] }) }));
8
13
  };
@@ -0,0 +1,4 @@
1
+ export interface FormFooterI {
2
+ onSave: () => void;
3
+ onCancel: () => void;
4
+ }
@@ -0,0 +1,9 @@
1
+ export interface ItemFormPanelI {
2
+ itemName?: string;
3
+ onClose: () => void;
4
+ onSaveItemName: (name: string) => void;
5
+ onSubmitForm: () => void;
6
+ panelIcon: string;
7
+ panelTitle: string;
8
+ showFooter?: boolean;
9
+ }
@@ -0,0 +1,12 @@
1
+ import { ImageDBI } from '../..';
2
+ export interface ItemFormTabImageI {
3
+ reportId?: string;
4
+ showHeader?: boolean;
5
+ isLoading?: boolean;
6
+ images?: ImageDBI[];
7
+ uploading?: boolean;
8
+ onDelete?: (imageId: string) => void;
9
+ onEdit?: (file: ImageDBI) => void;
10
+ onUpload?: (images: ImageDBI[]) => void;
11
+ onOpen?: () => void;
12
+ }
@@ -0,0 +1,4 @@
1
+ import { ItemFormTabImageI, ReportI } from '../..';
2
+ export interface ItemFormTabsI extends ItemFormTabImageI {
3
+ form?: ReportI[];
4
+ }
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter.interface';
2
+ export * from './ItemFormPanel.interface';
3
+ export * from './ItemFormTabImage.interface';
4
+ export * from './ItemFormTabs.interface';
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter.interface';
2
+ export * from './ItemFormPanel.interface';
3
+ export * from './ItemFormTabImage.interface';
4
+ export * from './ItemFormTabs.interface';
@@ -1,4 +1,5 @@
1
1
  export * from './dynamicForm';
2
+ export * from './ItemFormPanel';
2
3
  export * from './readOnly';
3
4
  export * from './Address.interface';
4
5
  export * from './BaseCounter.interface';
@@ -1,4 +1,5 @@
1
1
  export * from './dynamicForm';
2
+ export * from './ItemFormPanel';
2
3
  export * from './readOnly';
3
4
  export * from './Address.interface';
4
5
  export * from './BaseCounter.interface';
@@ -1,7 +1,6 @@
1
1
  export interface ItemNameHeaderI {
2
- handleChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
3
2
  id?: string;
4
- value: string;
5
- handleSave: () => void;
3
+ value?: string;
4
+ onSave: (name: string) => void;
6
5
  padding?: string;
7
6
  }
@@ -7,6 +7,7 @@ export default {
7
7
  title: 'Components/Contacts',
8
8
  component: ContactsContent,
9
9
  args: {
10
+ onClick: action('onClick'),
10
11
  contacts: ContactsMock,
11
12
  menuItems: menuMock,
12
13
  },
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react';
2
+ import { ItemFormPanelI } from '../../../interfaces';
3
+ declare const _default: Meta<ItemFormPanelI>;
4
+ export default _default;
5
+ export declare const ItemFormPanelComponent: (args: ItemFormPanelI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ItemFormPanel, ItemFormTabs, RightPanel } from '../../../components';
3
+ import { Paint } from '../../../assets/images/groups';
4
+ import { action } from '@storybook/addon-actions';
5
+ import { contactFieldsMock } from '../../../mocks';
6
+ export default {
7
+ title: 'Components/Forms/ItemFormPanel',
8
+ component: ItemFormPanel,
9
+ args: {
10
+ itemName: 'Item Name',
11
+ panelIcon: Paint,
12
+ panelTitle: 'Item Form',
13
+ onClose: action('onClose'),
14
+ onSaveItemName: action('onSaveItemName'),
15
+ onSubmitForm: action('onSubmitForm'),
16
+ },
17
+ };
18
+ export const ItemFormPanelComponent = (args) => {
19
+ return (_jsx(RightPanel, { isOpen: true, onClose: () => null, children: _jsx(ItemFormPanel, Object.assign({}, args, { children: _jsx(ItemFormTabs, { form: contactFieldsMock }) })) }));
20
+ };
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react';
2
+ import { ItemFormTabImageI } from '../../../interfaces';
3
+ declare const _default: Meta<ItemFormTabImageI>;
4
+ export default _default;
5
+ export declare const ItemFormTabImageComponent: (args: ItemFormTabImageI) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ItemFormTabImage } from '../../../components';
3
+ import { action } from '@storybook/addon-actions';
4
+ import { DisplayFilesMock } from '../../../mocks';
5
+ import { Box } from '@chakra-ui/react';
6
+ export default {
7
+ title: 'Components/Forms/ItemFormPanel',
8
+ component: ItemFormTabImage,
9
+ args: {
10
+ images: DisplayFilesMock[0].files,
11
+ isLoading: false,
12
+ uploading: false,
13
+ onDelete: action('onDelete'),
14
+ onEdit: action('onEdit'),
15
+ onUpload: action('onUpload'),
16
+ onOpen: action('onOpen'),
17
+ reportId: '123',
18
+ showHeader: true,
19
+ },
20
+ decorators: [
21
+ (Story) => (_jsx(Box, { bg: "neutral.white", children: _jsx(Story, {}) })),
22
+ ],
23
+ };
24
+ export const ItemFormTabImageComponent = (args) => {
25
+ return _jsx(ItemFormTabImage, Object.assign({}, args));
26
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homefile/components-v2",
3
- "version": "2.7.34",
3
+ "version": "2.8.0",
4
4
  "author": "Homefile",
5
5
  "license": "UNLICENSED",
6
6
  "typings": "dist/index.d.ts",
@@ -0,0 +1,15 @@
1
+ import { t } from 'i18next'
2
+ import { FooterButtons } from '@/components'
3
+ import { FormFooterI } from '@/interfaces'
4
+
5
+ export const ItemFormFooter = ({ onSave, onCancel }: FormFooterI) => {
6
+ const buttonsFooter = {
7
+ button1: {
8
+ buttonStyle: 'primaryFooter',
9
+ label: t('buttons.save'),
10
+ onClick: onSave,
11
+ },
12
+ }
13
+
14
+ return <FooterButtons button1={buttonsFooter.button1} />
15
+ }
@@ -0,0 +1,62 @@
1
+ import { PropsWithChildren } from 'react'
2
+ import {
3
+ DrawerBody,
4
+ DrawerHeader,
5
+ DrawerContent,
6
+ DrawerFooter,
7
+ Box,
8
+ } from '@chakra-ui/react'
9
+ import {
10
+ PanelHeader,
11
+ FooterDrawer,
12
+ ItemNameHeader,
13
+ ItemFormFooter,
14
+ Overlay,
15
+ } from '@/components'
16
+ import { ItemFormPanelI } from '@/interfaces'
17
+
18
+ export const ItemFormPanel = ({
19
+ children,
20
+ itemName,
21
+ onClose,
22
+ onSaveItemName,
23
+ onSubmitForm,
24
+ panelIcon,
25
+ panelTitle,
26
+ showFooter = false,
27
+ }: PropsWithChildren<ItemFormPanelI>) => {
28
+ return (
29
+ <DrawerContent bg="lightBlue.1" zIndex={4}>
30
+ <DrawerHeader p="0">
31
+ <PanelHeader
32
+ handleCloseButton={onClose}
33
+ icon={panelIcon}
34
+ title={panelTitle}
35
+ />
36
+ </DrawerHeader>
37
+
38
+ <DrawerBody padding="0" bg="lightBlue.1">
39
+ <ItemNameHeader
40
+ id="item-name"
41
+ onSave={onSaveItemName}
42
+ value={itemName}
43
+ />
44
+ <Box position="relative">
45
+ <Overlay
46
+ showOverlay={!itemName}
47
+ position="absolute"
48
+ w="inherit"
49
+ h="inherit"
50
+ zIndex="9"
51
+ />
52
+ </Box>
53
+ {children}
54
+ </DrawerBody>
55
+ <FooterDrawer isOpen={showFooter}>
56
+ <DrawerFooter w="100%">
57
+ <ItemFormFooter onSave={onSubmitForm} onCancel={onClose} />
58
+ </DrawerFooter>
59
+ </FooterDrawer>
60
+ </DrawerContent>
61
+ )
62
+ }
@@ -0,0 +1,35 @@
1
+ import { Center, Text } from '@chakra-ui/react'
2
+ import { AddMedia } from '@/components'
3
+ import { ItemFormTabImageI } from '@/interfaces'
4
+
5
+ export const ItemFormTabImage = ({
6
+ reportId = '',
7
+ showHeader = true,
8
+ isLoading = false,
9
+ images = [],
10
+ uploading = false,
11
+ onDelete = () => null,
12
+ onEdit = () => null,
13
+ onUpload = () => null,
14
+ onOpen = () => null,
15
+ }: ItemFormTabImageI) => {
16
+ if (!reportId) {
17
+ return (
18
+ <Center h="300px">
19
+ <Text fontFamily="secondary">Please save form to add images.</Text>
20
+ </Center>
21
+ )
22
+ }
23
+ return (
24
+ <AddMedia
25
+ showHeader={showHeader}
26
+ loading={isLoading}
27
+ images={images}
28
+ uploading={uploading}
29
+ handleDelete={onDelete}
30
+ handleEdit={onEdit}
31
+ handleUpload={onUpload}
32
+ handleOpen={onOpen}
33
+ />
34
+ )
35
+ }
@@ -0,0 +1,22 @@
1
+ import { t } from 'i18next'
2
+ import { Box } from '@chakra-ui/react'
3
+ import { DynamicForm, TabsHeader, ItemFormTabImage } from '@/components'
4
+ import { ItemFormTabsI } from '@/interfaces'
5
+
6
+ export const ItemFormTabs = ({ form = [], ...props }: ItemFormTabsI) => {
7
+ const tabList = [
8
+ {
9
+ label: t('createDocument.tabs.tab1'),
10
+ component: (
11
+ <Box overflow="scroll" minH="100vh">
12
+ <DynamicForm form={form} />
13
+ </Box>
14
+ ),
15
+ },
16
+ {
17
+ label: t('createDocument.tabs.tab2'),
18
+ component: <ItemFormTabImage {...props} />,
19
+ },
20
+ ]
21
+ return <TabsHeader tabList={tabList} />
22
+ }
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter'
2
+ export * from './ItemFormPanel'
3
+ export * from './ItemFormTabImage'
4
+ export * from './ItemFormTabs'
@@ -1,4 +1,5 @@
1
1
  export * from './fields'
2
+ export * from './ItemFormPanel'
2
3
  export * from './DynamicForm'
3
4
  export * from './SimpleDynamicForm'
4
5
  export * from './HiddenField'
@@ -3,14 +3,18 @@ import { Box, Flex, Button } from '@chakra-ui/react'
3
3
  import { TextInput } from '@/components'
4
4
  import { isEmptyField } from '@/utils'
5
5
  import { ItemNameHeaderI } from '@/interfaces'
6
+ import { useState } from 'react'
6
7
 
7
8
  export const ItemNameHeader = ({
8
9
  id = '',
9
- handleChange,
10
- value,
11
- handleSave,
10
+ value = '',
11
+ onSave,
12
12
  padding = 'base',
13
13
  }: ItemNameHeaderI) => {
14
+ const [name, setName] = useState(value)
15
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
16
+ setName(e.target.value)
17
+ }
14
18
  return (
15
19
  <Box bg="lightBlue.2" p={padding} w="100%">
16
20
  <Flex gap="base" align="center">
@@ -18,18 +22,18 @@ export const ItemNameHeader = ({
18
22
  errorMessage={`${t('householdItems.headers.itemName')} ${t(
19
23
  'forms.required'
20
24
  )}`}
21
- hasError={isEmptyField(value)}
25
+ hasError={isEmptyField(name)}
22
26
  id={id}
23
27
  handleChange={handleChange}
24
28
  placeholder={t('householdItems.headers.placeholder')}
25
- value={value}
29
+ value={name}
26
30
  />
27
- {value && (
31
+ {name && (
28
32
  <Button
29
33
  variant="secondary"
30
34
  maxW="fit-content"
31
35
  maxH="input.md"
32
- onClick={handleSave}
36
+ onClick={() => onSave(name)}
33
37
  >
34
38
  {t('createDocument.buttons.save')}
35
39
  </Button>
@@ -0,0 +1,4 @@
1
+ export interface FormFooterI {
2
+ onSave: () => void
3
+ onCancel: () => void
4
+ }
@@ -0,0 +1,9 @@
1
+ export interface ItemFormPanelI {
2
+ itemName?: string
3
+ onClose: () => void
4
+ onSaveItemName: (name: string) => void
5
+ onSubmitForm: () => void
6
+ panelIcon: string
7
+ panelTitle: string
8
+ showFooter?: boolean
9
+ }
@@ -0,0 +1,13 @@
1
+ import { ImageDBI } from '@/interfaces'
2
+
3
+ export interface ItemFormTabImageI {
4
+ reportId?: string
5
+ showHeader?: boolean
6
+ isLoading?: boolean
7
+ images?: ImageDBI[]
8
+ uploading?: boolean
9
+ onDelete?: (imageId: string) => void
10
+ onEdit?: (file: ImageDBI) => void
11
+ onUpload?: (images: ImageDBI[]) => void
12
+ onOpen?: () => void
13
+ }
@@ -0,0 +1,5 @@
1
+ import { ItemFormTabImageI, ReportI } from '@/interfaces'
2
+
3
+ export interface ItemFormTabsI extends ItemFormTabImageI {
4
+ form?: ReportI[]
5
+ }
@@ -0,0 +1,4 @@
1
+ export * from './ItemFormFooter.interface'
2
+ export * from './ItemFormPanel.interface'
3
+ export * from './ItemFormTabImage.interface'
4
+ export * from './ItemFormTabs.interface'
@@ -1,4 +1,5 @@
1
1
  export * from './dynamicForm'
2
+ export * from './ItemFormPanel'
2
3
  export * from './readOnly'
3
4
  export * from './Address.interface'
4
5
  export * from './BaseCounter.interface'
@@ -1,7 +1,6 @@
1
1
  export interface ItemNameHeaderI {
2
- handleChange: (event: React.ChangeEvent<HTMLInputElement>) => void
3
2
  id?: string
4
- value: string
5
- handleSave: () => void
3
+ value?: string
4
+ onSave: (name: string) => void
6
5
  padding?: string
7
6
  }
@@ -9,6 +9,7 @@ export default {
9
9
  title: 'Components/Contacts',
10
10
  component: ContactsContent,
11
11
  args: {
12
+ onClick: action('onClick'),
12
13
  contacts: ContactsMock,
13
14
  menuItems: menuMock,
14
15
  },
@@ -0,0 +1,29 @@
1
+ import { Meta } from '@storybook/react'
2
+ import { ItemFormPanel, ItemFormTabs, RightPanel } from '@/components'
3
+ import { ItemFormPanelI } from '@/interfaces'
4
+ import { Paint } from '@/assets/images/groups'
5
+ import { action } from '@storybook/addon-actions'
6
+ import { contactFieldsMock } from '@/mocks'
7
+
8
+ export default {
9
+ title: 'Components/Forms/ItemFormPanel',
10
+ component: ItemFormPanel,
11
+ args: {
12
+ itemName: 'Item Name',
13
+ panelIcon: Paint,
14
+ panelTitle: 'Item Form',
15
+ onClose: action('onClose'),
16
+ onSaveItemName: action('onSaveItemName'),
17
+ onSubmitForm: action('onSubmitForm'),
18
+ },
19
+ } as Meta<ItemFormPanelI>
20
+
21
+ export const ItemFormPanelComponent = (args: ItemFormPanelI) => {
22
+ return (
23
+ <RightPanel isOpen onClose={() => null}>
24
+ <ItemFormPanel {...args}>
25
+ <ItemFormTabs form={contactFieldsMock} />
26
+ </ItemFormPanel>
27
+ </RightPanel>
28
+ )
29
+ }
@@ -0,0 +1,33 @@
1
+ import { Meta } from '@storybook/react'
2
+ import { ItemFormTabImage } from '@/components'
3
+ import { ItemFormTabImageI } from '@/interfaces'
4
+ import { action } from '@storybook/addon-actions'
5
+ import { DisplayFilesMock } from '@/mocks'
6
+ import { Box } from '@chakra-ui/react'
7
+
8
+ export default {
9
+ title: 'Components/Forms/ItemFormPanel',
10
+ component: ItemFormTabImage,
11
+ args: {
12
+ images: DisplayFilesMock[0].files,
13
+ isLoading: false,
14
+ uploading: false,
15
+ onDelete: action('onDelete'),
16
+ onEdit: action('onEdit'),
17
+ onUpload: action('onUpload'),
18
+ onOpen: action('onOpen'),
19
+ reportId: '123',
20
+ showHeader: true,
21
+ },
22
+ decorators: [
23
+ (Story: any) => (
24
+ <Box bg="neutral.white">
25
+ <Story />
26
+ </Box>
27
+ ),
28
+ ],
29
+ } as Meta<ItemFormTabImageI>
30
+
31
+ export const ItemFormTabImageComponent = (args: ItemFormTabImageI) => {
32
+ return <ItemFormTabImage {...args} />
33
+ }
@@ -1,7 +1,6 @@
1
1
  import { Meta } from '@storybook/react'
2
2
  import { AddHomeItemHeader } from '@/components'
3
3
  import { ItemNameHeaderI, CreateHouseholdItemHeaderI } from '@/interfaces'
4
- import { action } from '@storybook/addon-actions'
5
4
  import { RoomsList, SelectGroups } from '@/helpers'
6
5
  import { Box } from '@chakra-ui/react'
7
6