box-ui-elements 23.5.0-beta.1 → 23.5.0-beta.3
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.
- package/dist/explorer.css +1 -1
- package/dist/explorer.js +1 -1
- package/dist/preview.css +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.css +1 -1
- package/dist/sidebar.js +1 -1
- package/es/elements/content-explorer/ContentExplorer.js +23 -25
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/elements/content-explorer/stories/MetadataView.stories.js +3 -0
- package/es/elements/content-explorer/stories/MetadataView.stories.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +3 -0
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/features/metadata-instance-editor/CascadePolicy.js +3 -3
- package/es/features/metadata-instance-editor/CascadePolicy.js.flow +2 -3
- package/es/features/metadata-instance-editor/CascadePolicy.js.map +1 -1
- package/es/features/metadata-instance-editor/Instance.js +0 -2
- package/es/features/metadata-instance-editor/Instance.js.flow +0 -5
- package/es/features/metadata-instance-editor/Instance.js.map +1 -1
- package/es/features/metadata-instance-editor/Instances.js +0 -2
- package/es/features/metadata-instance-editor/Instances.js.flow +0 -3
- package/es/features/metadata-instance-editor/Instances.js.map +1 -1
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js +0 -2
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.flow +0 -3
- package/es/features/metadata-instance-editor/MetadataInstanceEditor.js.map +1 -1
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js +0 -1
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js.flow +0 -1
- package/es/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js.map +1 -1
- package/es/src/elements/content-explorer/ContentExplorer.d.ts +0 -7
- package/package.json +3 -3
- package/src/elements/content-explorer/ContentExplorer.tsx +23 -25
- package/src/elements/content-explorer/stories/MetadataView.stories.tsx +4 -0
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +4 -0
- package/src/features/metadata-instance-editor/CascadePolicy.js +2 -3
- package/src/features/metadata-instance-editor/Instance.js +0 -5
- package/src/features/metadata-instance-editor/Instances.js +0 -3
- package/src/features/metadata-instance-editor/MetadataInstanceEditor.js +0 -3
- package/src/features/metadata-instance-editor/__tests__/CascadePolicy.test.js +0 -9
- package/src/features/metadata-instance-editor/__tests__/Instance.test.js +0 -28
- package/src/features/metadata-instance-editor/__tests__/Instances.test.js +7 -9
- package/src/features/metadata-instance-editor/__tests__/MetadataInstanceEditor.test.js +1 -48
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instance.test.js.snap +0 -1
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/Instances.test.js.snap +0 -2
- package/src/features/metadata-instance-editor/__tests__/__snapshots__/MetadataInstanceEditor.test.js.snap +0 -1
- package/src/features/metadata-instance-editor/stories/tests/CascadePolicy-visual.stories.js +0 -1
|
@@ -11,6 +11,7 @@ import noop from 'lodash/noop';
|
|
|
11
11
|
import ContentExplorer from '../../ContentExplorer';
|
|
12
12
|
import { DEFAULT_HOSTNAME_API } from '../../../../constants';
|
|
13
13
|
import { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';
|
|
14
|
+
import { mockRootFolder } from '../../../common/__mocks__/mockRootFolder';
|
|
14
15
|
|
|
15
16
|
// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.
|
|
16
17
|
const {
|
|
@@ -190,6 +191,8 @@ const meta = {
|
|
|
190
191
|
return HttpResponse.json(mockMetadata);
|
|
191
192
|
}), http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {
|
|
192
193
|
return HttpResponse.json(mockSchema);
|
|
194
|
+
}), http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {
|
|
195
|
+
return HttpResponse.json(mockRootFolder);
|
|
193
196
|
})]
|
|
194
197
|
}
|
|
195
198
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","expect","userEvent","waitFor","within","Download","SignMeOthers","Sign","noop","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","scope","templateScope","templateKey","metadataScopeAndKey","metadataFieldNamePrefix","metadataQuery","from","ancestor_folder_id","sort_by","field_key","fields","key","direction","map","field","fieldsToShow","canEdit","displayName","columns","textValue","id","type","allowSorting","minWidth","maxWidth","defaultView","metadataView","args","metadataViewV2ElementProps","metadataViewProps","features","contentExplorer","metadataViewV2","metadataViewV2WithCustomActions","_objectSpread","tableProps","isSelectAllEnabled","itemActionMenuProps","actions","label","onClick","icon","subMenuTrigger","subMenuActions","play","canvas","getByRole","name","toBeInTheDocument","firstRow","ellipsesButton","click","initialFilterActionBarProps","initialFilterValues","value","metadataViewV2WithInitialFilterValues","actionBarProps","toHaveTextContent","contactRoleChip","fileTypeChip","meta","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport { expect, userEvent, waitFor, within } from 'storybook/test';\nimport { Download, SignMeOthers } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { Sign } from '@box/blueprint-web-assets/icons/Line';\nimport noop from 'lodash/noop';\n\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\n\n// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.\nconst { scope: templateScope, templateKey } = mockSchema;\n\nconst metadataScopeAndKey = `${templateScope}.${templateKey}`;\nconst metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;\n\n// This is the body of the metadata query API call.\n// https://developer.box.com/guides/metadata/queries/syntax/\nconst metadataQuery = {\n from: metadataScopeAndKey,\n ancestor_folder_id: '0',\n sort_by: [\n {\n field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`, // Default to sorting by the first field in the schema\n direction: 'asc',\n },\n ],\n fields: [\n // Default to returning all fields in the metadata template schema, and name as a standalone (non-metadata) field\n ...mockSchema.fields.map(field => `${metadataFieldNamePrefix}.${field.key}`),\n 'name',\n ],\n};\n\n// Used for metadata view v1\nconst fieldsToShow = [\n { key: `${metadataFieldNamePrefix}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataFieldNamePrefix}.industry`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.last_contacted_at`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.role`, canEdit: true },\n];\n\n// Used for metadata view v2\nconst columns = [\n {\n // Always include the name column\n textValue: 'Name',\n id: 'name',\n type: 'string',\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n },\n ...mockSchema.fields.map(field => ({\n textValue: field.displayName,\n id: `${metadataFieldNamePrefix}.${field.key}`,\n type: field.type,\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n })),\n];\n\n// Switches ContentExplorer to use Metadata View over standard, folder-based view.\nconst defaultView = 'metadata';\n\ntype Story = StoryObj<typeof ContentExplorer>;\n\nexport const metadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nconst metadataViewV2ElementProps = {\n metadataViewProps: {\n columns,\n },\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n};\n\nexport const metadataViewV2: Story = {\n args: metadataViewV2ElementProps,\n};\n\nexport const metadataViewV2WithCustomActions: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n itemActionMenuProps: {\n actions: [\n {\n label: 'Download',\n onClick: noop,\n icon: Download,\n },\n ],\n subMenuTrigger: {\n label: 'Sign',\n icon: Sign,\n },\n subMenuActions: [\n {\n label: 'Request Signature',\n onClick: noop,\n icon: SignMeOthers,\n },\n ],\n },\n },\n },\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const ellipsesButton = within(firstRow).getByRole('button', { name: 'Action menu' });\n userEvent.click(ellipsesButton);\n },\n};\n\nconst initialFilterActionBarProps = {\n initialFilterValues: {\n 'industry-filter': { value: ['Legal'] },\n 'mimetype-filter': { value: ['boxnoteType', 'documentType', 'threedType'] },\n 'role-filter': { value: ['Developer', 'Business Owner', 'Marketing'] },\n },\n};\n\nexport const metadataViewV2WithInitialFilterValues: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n actionBarProps: initialFilterActionBarProps,\n },\n },\n play: async ({ canvas }) => {\n // Wait for chips to update with initial values\n await waitFor(() => {\n expect(canvas.getByRole('button', { name: /Industry/i })).toHaveTextContent(/\\(1\\)/);\n });\n // Other chips should reflect initialized values\n const contactRoleChip = canvas.getByRole('button', { name: /Contact Role/i });\n expect(contactRoleChip).toHaveTextContent(/\\(3\\)/);\n\n const fileTypeChip = canvas.getByRole('button', { name: /Box Note/i });\n expect(fileTypeChip).toHaveTextContent(/\\+2/);\n },\n};\n\nconst meta: Meta<typeof ContentExplorer> = {\n title: 'Elements/ContentExplorer/tests/MetadataView/visual',\n component: ContentExplorer,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.post(`${DEFAULT_HOSTNAME_API}/2.0/metadata_queries/execute_read`, () => {\n return HttpResponse.json(mockMetadata);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {\n return HttpResponse.json(mockSchema);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MetadataView-visual.stories.js","names":["http","HttpResponse","expect","userEvent","waitFor","within","Download","SignMeOthers","Sign","noop","ContentExplorer","DEFAULT_HOSTNAME_API","mockMetadata","mockSchema","mockRootFolder","scope","templateScope","templateKey","metadataScopeAndKey","metadataFieldNamePrefix","metadataQuery","from","ancestor_folder_id","sort_by","field_key","fields","key","direction","map","field","fieldsToShow","canEdit","displayName","columns","textValue","id","type","allowSorting","minWidth","maxWidth","defaultView","metadataView","args","metadataViewV2ElementProps","metadataViewProps","features","contentExplorer","metadataViewV2","metadataViewV2WithCustomActions","_objectSpread","tableProps","isSelectAllEnabled","itemActionMenuProps","actions","label","onClick","icon","subMenuTrigger","subMenuActions","play","canvas","getByRole","name","toBeInTheDocument","firstRow","ellipsesButton","click","initialFilterActionBarProps","initialFilterValues","value","metadataViewV2WithInitialFilterValues","actionBarProps","toHaveTextContent","contactRoleChip","fileTypeChip","meta","title","component","global","FEATURE_FLAGS","rootFolderId","FOLDER_ID","token","TOKEN","parameters","msw","handlers","post","json","get"],"sources":["../../../../../src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react';\nimport { http, HttpResponse } from 'msw';\nimport { expect, userEvent, waitFor, within } from 'storybook/test';\nimport { Download, SignMeOthers } from '@box/blueprint-web-assets/icons/Fill/index';\nimport { Sign } from '@box/blueprint-web-assets/icons/Line';\nimport noop from 'lodash/noop';\n\nimport ContentExplorer from '../../ContentExplorer';\nimport { DEFAULT_HOSTNAME_API } from '../../../../constants';\nimport { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';\nimport { mockRootFolder } from '../../../common/__mocks__/mockRootFolder';\n\n// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.\nconst { scope: templateScope, templateKey } = mockSchema;\n\nconst metadataScopeAndKey = `${templateScope}.${templateKey}`;\nconst metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;\n\n// This is the body of the metadata query API call.\n// https://developer.box.com/guides/metadata/queries/syntax/\nconst metadataQuery = {\n from: metadataScopeAndKey,\n ancestor_folder_id: '0',\n sort_by: [\n {\n field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`, // Default to sorting by the first field in the schema\n direction: 'asc',\n },\n ],\n fields: [\n // Default to returning all fields in the metadata template schema, and name as a standalone (non-metadata) field\n ...mockSchema.fields.map(field => `${metadataFieldNamePrefix}.${field.key}`),\n 'name',\n ],\n};\n\n// Used for metadata view v1\nconst fieldsToShow = [\n { key: `${metadataFieldNamePrefix}.name`, canEdit: false, displayName: 'Alias' },\n { key: `${metadataFieldNamePrefix}.industry`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.last_contacted_at`, canEdit: true },\n { key: `${metadataFieldNamePrefix}.role`, canEdit: true },\n];\n\n// Used for metadata view v2\nconst columns = [\n {\n // Always include the name column\n textValue: 'Name',\n id: 'name',\n type: 'string',\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n },\n ...mockSchema.fields.map(field => ({\n textValue: field.displayName,\n id: `${metadataFieldNamePrefix}.${field.key}`,\n type: field.type,\n allowSorting: true,\n minWidth: 150,\n maxWidth: 150,\n })),\n];\n\n// Switches ContentExplorer to use Metadata View over standard, folder-based view.\nconst defaultView = 'metadata';\n\ntype Story = StoryObj<typeof ContentExplorer>;\n\nexport const metadataView: Story = {\n args: {\n metadataQuery,\n fieldsToShow,\n defaultView,\n },\n};\n\nconst metadataViewV2ElementProps = {\n metadataViewProps: {\n columns,\n },\n metadataQuery,\n fieldsToShow,\n defaultView,\n features: {\n contentExplorer: {\n metadataViewV2: true,\n },\n },\n};\n\nexport const metadataViewV2: Story = {\n args: metadataViewV2ElementProps,\n};\n\nexport const metadataViewV2WithCustomActions: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n itemActionMenuProps: {\n actions: [\n {\n label: 'Download',\n onClick: noop,\n icon: Download,\n },\n ],\n subMenuTrigger: {\n label: 'Sign',\n icon: Sign,\n },\n subMenuActions: [\n {\n label: 'Request Signature',\n onClick: noop,\n icon: SignMeOthers,\n },\n ],\n },\n },\n },\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const ellipsesButton = within(firstRow).getByRole('button', { name: 'Action menu' });\n userEvent.click(ellipsesButton);\n },\n};\n\nconst initialFilterActionBarProps = {\n initialFilterValues: {\n 'industry-filter': { value: ['Legal'] },\n 'mimetype-filter': { value: ['boxnoteType', 'documentType', 'threedType'] },\n 'role-filter': { value: ['Developer', 'Business Owner', 'Marketing'] },\n },\n};\n\nexport const metadataViewV2WithInitialFilterValues: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n actionBarProps: initialFilterActionBarProps,\n },\n },\n play: async ({ canvas }) => {\n // Wait for chips to update with initial values\n await waitFor(() => {\n expect(canvas.getByRole('button', { name: /Industry/i })).toHaveTextContent(/\\(1\\)/);\n });\n // Other chips should reflect initialized values\n const contactRoleChip = canvas.getByRole('button', { name: /Contact Role/i });\n expect(contactRoleChip).toHaveTextContent(/\\(3\\)/);\n\n const fileTypeChip = canvas.getByRole('button', { name: /Box Note/i });\n expect(fileTypeChip).toHaveTextContent(/\\+2/);\n },\n};\n\nconst meta: Meta<typeof ContentExplorer> = {\n title: 'Elements/ContentExplorer/tests/MetadataView/visual',\n component: ContentExplorer,\n args: {\n features: global.FEATURE_FLAGS,\n rootFolderId: global.FOLDER_ID,\n token: global.TOKEN,\n },\n parameters: {\n msw: {\n handlers: [\n http.post(`${DEFAULT_HOSTNAME_API}/2.0/metadata_queries/execute_read`, () => {\n return HttpResponse.json(mockMetadata);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {\n return HttpResponse.json(mockSchema);\n }),\n http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {\n return HttpResponse.json(mockRootFolder);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":";;;;;AACA,SAASA,IAAI,EAAEC,YAAY,QAAQ,KAAK;AACxC,SAASC,MAAM,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,gBAAgB;AACnE,SAASC,QAAQ,EAAEC,YAAY,QAAQ,4CAA4C;AACnF,SAASC,IAAI,QAAQ,sCAAsC;AAC3D,OAAOC,IAAI,MAAM,aAAa;AAE9B,OAAOC,eAAe,MAAM,uBAAuB;AACnD,SAASC,oBAAoB,QAAQ,uBAAuB;AAC5D,SAASC,YAAY,EAAEC,UAAU,QAAQ,wCAAwC;AACjF,SAASC,cAAc,QAAQ,0CAA0C;;AAEzE;AACA,MAAM;EAAEC,KAAK,EAAEC,aAAa;EAAEC;AAAY,CAAC,GAAGJ,UAAU;AAExD,MAAMK,mBAAmB,GAAG,GAAGF,aAAa,IAAIC,WAAW,EAAE;AAC7D,MAAME,uBAAuB,GAAG,YAAYD,mBAAmB,EAAE;;AAEjE;AACA;AACA,MAAME,aAAa,GAAG;EAClBC,IAAI,EAAEH,mBAAmB;EACzBI,kBAAkB,EAAE,GAAG;EACvBC,OAAO,EAAE,CACL;IACIC,SAAS,EAAE,GAAGL,uBAAuB,IAAIN,UAAU,CAACY,MAAM,CAAC,CAAC,CAAC,CAACC,GAAG,EAAE;IAAE;IACrEC,SAAS,EAAE;EACf,CAAC,CACJ;EACDF,MAAM,EAAE;EACJ;EACA,GAAGZ,UAAU,CAACY,MAAM,CAACG,GAAG,CAACC,KAAK,IAAI,GAAGV,uBAAuB,IAAIU,KAAK,CAACH,GAAG,EAAE,CAAC,EAC5E,MAAM;AAEd,CAAC;;AAED;AACA,MAAMI,YAAY,GAAG,CACjB;EAAEJ,GAAG,EAAE,GAAGP,uBAAuB,OAAO;EAAEY,OAAO,EAAE,KAAK;EAAEC,WAAW,EAAE;AAAQ,CAAC,EAChF;EAAEN,GAAG,EAAE,GAAGP,uBAAuB,WAAW;EAAEY,OAAO,EAAE;AAAK,CAAC,EAC7D;EAAEL,GAAG,EAAE,GAAGP,uBAAuB,oBAAoB;EAAEY,OAAO,EAAE;AAAK,CAAC,EACtE;EAAEL,GAAG,EAAE,GAAGP,uBAAuB,OAAO;EAAEY,OAAO,EAAE;AAAK,CAAC,CAC5D;;AAED;AACA,MAAME,OAAO,GAAG,CACZ;EACI;EACAC,SAAS,EAAE,MAAM;EACjBC,EAAE,EAAE,MAAM;EACVC,IAAI,EAAE,QAAQ;EACdC,YAAY,EAAE,IAAI;EAClBC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE;AACd,CAAC,EACD,GAAG1B,UAAU,CAACY,MAAM,CAACG,GAAG,CAACC,KAAK,KAAK;EAC/BK,SAAS,EAAEL,KAAK,CAACG,WAAW;EAC5BG,EAAE,EAAE,GAAGhB,uBAAuB,IAAIU,KAAK,CAACH,GAAG,EAAE;EAC7CU,IAAI,EAAEP,KAAK,CAACO,IAAI;EAChBC,YAAY,EAAE,IAAI;EAClBC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE;AACd,CAAC,CAAC,CAAC,CACN;;AAED;AACA,MAAMC,WAAW,GAAG,UAAU;AAI9B,OAAO,MAAMC,YAAmB,GAAG;EAC/BC,IAAI,EAAE;IACFtB,aAAa;IACbU,YAAY;IACZU;EACJ;AACJ,CAAC;AAED,MAAMG,0BAA0B,GAAG;EAC/BC,iBAAiB,EAAE;IACfX;EACJ,CAAC;EACDb,aAAa;EACbU,YAAY;EACZU,WAAW;EACXK,QAAQ,EAAE;IACNC,eAAe,EAAE;MACbC,cAAc,EAAE;IACpB;EACJ;AACJ,CAAC;AAED,OAAO,MAAMA,cAAqB,GAAG;EACjCL,IAAI,EAAEC;AACV,CAAC;AAED,OAAO,MAAMK,+BAAsC,GAAG;EAClDN,IAAI,EAAAO,aAAA,CAAAA,aAAA,KACGN,0BAA0B;IAC7BC,iBAAiB,EAAE;MACfX,OAAO;MACPiB,UAAU,EAAE;QACRC,kBAAkB,EAAE;MACxB,CAAC;MACDC,mBAAmB,EAAE;QACjBC,OAAO,EAAE,CACL;UACIC,KAAK,EAAE,UAAU;UACjBC,OAAO,EAAE9C,IAAI;UACb+C,IAAI,EAAElD;QACV,CAAC,CACJ;QACDmD,cAAc,EAAE;UACZH,KAAK,EAAE,MAAM;UACbE,IAAI,EAAEhD;QACV,CAAC;QACDkD,cAAc,EAAE,CACZ;UACIJ,KAAK,EAAE,mBAAmB;UAC1BC,OAAO,EAAE9C,IAAI;UACb+C,IAAI,EAAEjD;QACV,CAAC;MAET;IACJ;EAAC,EACJ;EACDoD,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAO,CAAC,KAAK;IACxB,MAAMxD,OAAO,CAAC,MAAM;MAChBF,MAAM,CAAC0D,MAAM,CAACC,SAAS,CAAC,KAAK,EAAE;QAAEC,IAAI,EAAE;MAAW,CAAC,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,MAAMC,QAAQ,GAAGJ,MAAM,CAACC,SAAS,CAAC,KAAK,EAAE;MAAEC,IAAI,EAAE;IAAW,CAAC,CAAC;IAC9D,MAAMG,cAAc,GAAG5D,MAAM,CAAC2D,QAAQ,CAAC,CAACH,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAc,CAAC,CAAC;IACpF3D,SAAS,CAAC+D,KAAK,CAACD,cAAc,CAAC;EACnC;AACJ,CAAC;AAED,MAAME,2BAA2B,GAAG;EAChCC,mBAAmB,EAAE;IACjB,iBAAiB,EAAE;MAAEC,KAAK,EAAE,CAAC,OAAO;IAAE,CAAC;IACvC,iBAAiB,EAAE;MAAEA,KAAK,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY;IAAE,CAAC;IAC3E,aAAa,EAAE;MAAEA,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW;IAAE;EACzE;AACJ,CAAC;AAED,OAAO,MAAMC,qCAA4C,GAAG;EACxD5B,IAAI,EAAAO,aAAA,CAAAA,aAAA,KACGN,0BAA0B;IAC7BC,iBAAiB,EAAE;MACfX,OAAO;MACPsC,cAAc,EAAEJ;IACpB;EAAC,EACJ;EACDR,IAAI,EAAE,MAAAA,CAAO;IAAEC;EAAO,CAAC,KAAK;IACxB;IACA,MAAMxD,OAAO,CAAC,MAAM;MAChBF,MAAM,CAAC0D,MAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAY,CAAC,CAAC,CAAC,CAACU,iBAAiB,CAAC,OAAO,CAAC;IACxF,CAAC,CAAC;IACF;IACA,MAAMC,eAAe,GAAGb,MAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAgB,CAAC,CAAC;IAC7E5D,MAAM,CAACuE,eAAe,CAAC,CAACD,iBAAiB,CAAC,OAAO,CAAC;IAElD,MAAME,YAAY,GAAGd,MAAM,CAACC,SAAS,CAAC,QAAQ,EAAE;MAAEC,IAAI,EAAE;IAAY,CAAC,CAAC;IACtE5D,MAAM,CAACwE,YAAY,CAAC,CAACF,iBAAiB,CAAC,KAAK,CAAC;EACjD;AACJ,CAAC;AAED,MAAMG,IAAkC,GAAG;EACvCC,KAAK,EAAE,oDAAoD;EAC3DC,SAAS,EAAEnE,eAAe;EAC1BgC,IAAI,EAAE;IACFG,QAAQ,EAAEiC,MAAM,CAACC,aAAa;IAC9BC,YAAY,EAAEF,MAAM,CAACG,SAAS;IAC9BC,KAAK,EAAEJ,MAAM,CAACK;EAClB,CAAC;EACDC,UAAU,EAAE;IACRC,GAAG,EAAE;MACDC,QAAQ,EAAE,CACNtF,IAAI,CAACuF,IAAI,CAAC,GAAG5E,oBAAoB,oCAAoC,EAAE,MAAM;QACzE,OAAOV,YAAY,CAACuF,IAAI,CAAC5E,YAAY,CAAC;MAC1C,CAAC,CAAC,EACFZ,IAAI,CAACyF,GAAG,CAAC,GAAG9E,oBAAoB,wDAAwD,EAAE,MAAM;QAC5F,OAAOV,YAAY,CAACuF,IAAI,CAAC3E,UAAU,CAAC;MACxC,CAAC,CAAC,EACFb,IAAI,CAACyF,GAAG,CAAC,GAAG9E,oBAAoB,kBAAkB,EAAE,MAAM;QACtD,OAAOV,YAAY,CAACuF,IAAI,CAAC1E,cAAc,CAAC;MAC5C,CAAC,CAAC;IAEV;EACJ;AACJ,CAAC;AAED,eAAe6D,IAAI","ignoreList":[]}
|
|
@@ -20,7 +20,6 @@ const AI_LINK = 'https://www.box.com/ai';
|
|
|
20
20
|
const CascadePolicy = ({
|
|
21
21
|
canEdit,
|
|
22
22
|
canUseAIFolderExtraction,
|
|
23
|
-
canUseAIFolderExtractionAgentSelector,
|
|
24
23
|
cascadePolicyConfiguration,
|
|
25
24
|
isCascadingEnabled,
|
|
26
25
|
isCascadingOverwritten,
|
|
@@ -129,13 +128,14 @@ const CascadePolicy = ({
|
|
|
129
128
|
className: "cascade-policy-link",
|
|
130
129
|
href: AI_LINK,
|
|
131
130
|
target: "_blank"
|
|
132
|
-
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))),
|
|
131
|
+
}, /*#__PURE__*/React.createElement(FormattedMessage, messages.aiAutofillLearnMore))), isAIFolderExtractionEnabled && /*#__PURE__*/React.createElement("div", {
|
|
133
132
|
className: "metadata-cascade-ai-agent-selector"
|
|
134
133
|
}, /*#__PURE__*/React.createElement(BoxAiAgentSelectorWithApiContainer, {
|
|
135
134
|
disabled: isExistingCascadePolicy,
|
|
136
135
|
fetcher: agentFetcher,
|
|
137
136
|
onSelectAgent: handleAgentSelect,
|
|
138
|
-
recordAction: () => {}
|
|
137
|
+
recordAction: () => {},
|
|
138
|
+
selectorAlignment: "left"
|
|
139
139
|
}))))) : readOnlyState;
|
|
140
140
|
};
|
|
141
141
|
export default CascadePolicy;
|
|
@@ -27,7 +27,6 @@ const AI_LINK = 'https://www.box.com/ai';
|
|
|
27
27
|
type Props = {
|
|
28
28
|
canEdit: boolean,
|
|
29
29
|
canUseAIFolderExtraction: boolean,
|
|
30
|
-
canUseAIFolderExtractionAgentSelector: boolean,
|
|
31
30
|
cascadePolicyConfiguration?: MetadataCascadePolicyConfiguration,
|
|
32
31
|
isAIFolderExtractionEnabled: boolean,
|
|
33
32
|
isCascadingEnabled: boolean,
|
|
@@ -44,7 +43,6 @@ type Props = {
|
|
|
44
43
|
const CascadePolicy = ({
|
|
45
44
|
canEdit,
|
|
46
45
|
canUseAIFolderExtraction,
|
|
47
|
-
canUseAIFolderExtractionAgentSelector,
|
|
48
46
|
cascadePolicyConfiguration,
|
|
49
47
|
isCascadingEnabled,
|
|
50
48
|
isCascadingOverwritten,
|
|
@@ -194,13 +192,14 @@ const CascadePolicy = ({
|
|
|
194
192
|
<FormattedMessage {...messages.aiAutofillLearnMore} />
|
|
195
193
|
</Link>
|
|
196
194
|
</div>
|
|
197
|
-
{
|
|
195
|
+
{isAIFolderExtractionEnabled && (
|
|
198
196
|
<div className="metadata-cascade-ai-agent-selector">
|
|
199
197
|
<BoxAiAgentSelectorWithApiContainer
|
|
200
198
|
disabled={isExistingCascadePolicy}
|
|
201
199
|
fetcher={agentFetcher}
|
|
202
200
|
onSelectAgent={handleAgentSelect}
|
|
203
201
|
recordAction={() => {}}
|
|
202
|
+
selectorAlignment="left"
|
|
204
203
|
/>
|
|
205
204
|
</div>
|
|
206
205
|
)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadePolicy.js","names":["React","InlineNotice","useCallback","FormattedMessage","useIntl","BoxAiAdvancedColor","BoxAiColor","BoxAiAgentSelectorWithApiContainer","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","STANDARD_AGENT_ID","ENHANCED_AGENT_ID","ENHANCED_AGENT_CONFIGURATION","COMMUNITY_LINK","AI_LINK","CascadePolicy","canEdit","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","cascadePolicyConfiguration","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingCascadePolicy","onAIFolderExtractionToggle","onAIAgentSelect","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","formatMessage","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","isEnhancedAgentSelected","agent","agents","useMemo","id","name","standardAgentName","isEnterpriseDefault","enhancedAgentName","customIcon","isSelected","agentFetcher","Promise","resolve","handleAgentSelect","Fragment","variant","variantIconAriaLabel","cascadePolicyOptionsDisabledNoticeIconAriaLabel","cascadePolicyOptionsDisabledNotice","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","isDisabled","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","disabled","fetcher","onSelectAgent","recordAction"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport { InlineNotice } from '@box/blueprint-web';\nimport { useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\n// $FlowFixMe\nimport { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';\nimport { type AgentType } from '@box/box-ai-agent-selector';\n\n// $FlowFixMe\nimport { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\nimport { STANDARD_AGENT_ID, ENHANCED_AGENT_ID, ENHANCED_AGENT_CONFIGURATION } from './constants';\nimport type { MetadataCascadePolicyConfiguration } from '../../common/types/metadata';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n canUseAIFolderExtractionAgentSelector: boolean,\n cascadePolicyConfiguration?: MetadataCascadePolicyConfiguration,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n isExistingCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onAIAgentSelect?: (agent: AgentType | null) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n canUseAIFolderExtractionAgentSelector,\n cascadePolicyConfiguration,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n isExistingCascadePolicy,\n onAIFolderExtractionToggle,\n onAIAgentSelect,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const { formatMessage } = useIntl();\n\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n const isEnhancedAgentSelected = cascadePolicyConfiguration?.agent === ENHANCED_AGENT_CONFIGURATION;\n\n const agents = React.useMemo(\n () => [\n {\n id: STANDARD_AGENT_ID,\n name: formatMessage(messages.standardAgentName),\n isEnterpriseDefault: true,\n },\n {\n id: ENHANCED_AGENT_ID,\n name: formatMessage(messages.enhancedAgentName),\n isEnterpriseDefault: false,\n customIcon: BoxAiAdvancedColor,\n isSelected: isEnhancedAgentSelected,\n },\n ],\n [formatMessage, isEnhancedAgentSelected],\n );\n\n // BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>\n // Since we're passing in our own agents, we don't need to make an API call,\n // so we wrap the store data in a Promise to satisfy the component's interface requirements.\n const agentFetcher = useCallback(() => {\n return Promise.resolve({ agents });\n }, [agents]);\n\n const handleAgentSelect = useCallback(\n (agent: AgentType | null) => {\n if (onAIAgentSelect) {\n onAIAgentSelect(agent);\n }\n },\n [onAIAgentSelect],\n );\n\n return canEdit ? (\n <>\n {isExistingCascadePolicy && (\n <InlineNotice\n variant=\"info\"\n variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}\n >\n <FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />\n </InlineNotice>\n )}\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\" data-testid=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n aria-label={formatMessage(messages.enableCascadePolicy)}\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiColor className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n aria-label={formatMessage(messages.enableAIAutofill)}\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingCascadePolicy}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n {canUseAIFolderExtractionAgentSelector && isAIFolderExtractionEnabled && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <BoxAiAgentSelectorWithApiContainer\n disabled={isExistingCascadePolicy}\n fetcher={agentFetcher}\n onSelectAgent={handleAgentSelect}\n recordAction={() => {}}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CascadePolicy.js","names":["React","InlineNotice","useCallback","FormattedMessage","useIntl","BoxAiAdvancedColor","BoxAiColor","BoxAiAgentSelectorWithApiContainer","Toggle","RadioButton","RadioGroup","Link","IconAlertDefault","messages","STANDARD_AGENT_ID","ENHANCED_AGENT_ID","ENHANCED_AGENT_CONFIGURATION","COMMUNITY_LINK","AI_LINK","CascadePolicy","canEdit","canUseAIFolderExtraction","cascadePolicyConfiguration","isCascadingEnabled","isCascadingOverwritten","isCustomMetadata","isAIFolderExtractionEnabled","isExistingCascadePolicy","onAIFolderExtractionToggle","onAIAgentSelect","onCascadeToggle","onCascadeModeChange","shouldShowCascadeOptions","formatMessage","readOnlyState","createElement","className","metadataCascadePolicyEnabledInfo","isEnhancedAgentSelected","agent","agents","useMemo","id","name","standardAgentName","isEnterpriseDefault","enhancedAgentName","customIcon","isSelected","agentFetcher","Promise","resolve","handleAgentSelect","Fragment","variant","variantIconAriaLabel","cascadePolicyOptionsDisabledNoticeIconAriaLabel","cascadePolicyOptionsDisabledNotice","_extends","tagName","enableCascadePolicy","isOn","label","onChange","e","target","checked","applyCascadePolicyText","href","cascadePolicyLearnMore","cannotApplyCascadePolicyText","cascadePolicyModeQuestion","operationNotImmediate","value","isDisabled","cascadePolicySkipMode","cascadePolicyOverwriteMode","width","height","enableAIAutofill","aiAutofillDescription","aiAutofillLearnMore","disabled","fetcher","onSelectAgent","recordAction","selectorAlignment"],"sources":["../../../src/features/metadata-instance-editor/CascadePolicy.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport { InlineNotice } from '@box/blueprint-web';\nimport { useCallback } from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\n\n// $FlowFixMe\nimport { BoxAiAdvancedColor, BoxAiColor } from '@box/blueprint-web-assets/icons/Medium';\nimport { type AgentType } from '@box/box-ai-agent-selector';\n\n// $FlowFixMe\nimport { BoxAiAgentSelectorWithApiContainer } from '@box/box-ai-agent-selector';\n\nimport Toggle from '../../components/toggle';\nimport { RadioButton, RadioGroup } from '../../components/radio';\nimport Link from '../../components/link/Link';\nimport IconAlertDefault from '../../icons/general/IconAlertDefault';\nimport messages from './messages';\nimport './CascadePolicy.scss';\nimport { STANDARD_AGENT_ID, ENHANCED_AGENT_ID, ENHANCED_AGENT_CONFIGURATION } from './constants';\nimport type { MetadataCascadePolicyConfiguration } from '../../common/types/metadata';\n\nconst COMMUNITY_LINK = 'https://support.box.com/hc/en-us/articles/360044195873-Cascading-metadata-in-folders';\nconst AI_LINK = 'https://www.box.com/ai';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction: boolean,\n cascadePolicyConfiguration?: MetadataCascadePolicyConfiguration,\n isAIFolderExtractionEnabled: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isCustomMetadata: boolean,\n isExistingCascadePolicy: boolean,\n onAIFolderExtractionToggle: (value: boolean) => void,\n onAIAgentSelect?: (agent: AgentType | null) => void,\n onCascadeModeChange: (value: boolean) => void,\n onCascadeToggle: (value: boolean) => void,\n shouldShowCascadeOptions: boolean,\n};\n\nconst CascadePolicy = ({\n canEdit,\n canUseAIFolderExtraction,\n cascadePolicyConfiguration,\n isCascadingEnabled,\n isCascadingOverwritten,\n isCustomMetadata,\n isAIFolderExtractionEnabled,\n isExistingCascadePolicy,\n onAIFolderExtractionToggle,\n onAIAgentSelect,\n onCascadeToggle,\n onCascadeModeChange,\n shouldShowCascadeOptions,\n}: Props) => {\n const { formatMessage } = useIntl();\n\n const readOnlyState = isCascadingEnabled ? (\n <div className=\"metadata-cascade-notice\">\n <FormattedMessage {...messages.metadataCascadePolicyEnabledInfo} />\n </div>\n ) : null;\n\n const isEnhancedAgentSelected = cascadePolicyConfiguration?.agent === ENHANCED_AGENT_CONFIGURATION;\n\n const agents = React.useMemo(\n () => [\n {\n id: STANDARD_AGENT_ID,\n name: formatMessage(messages.standardAgentName),\n isEnterpriseDefault: true,\n },\n {\n id: ENHANCED_AGENT_ID,\n name: formatMessage(messages.enhancedAgentName),\n isEnterpriseDefault: false,\n customIcon: BoxAiAdvancedColor,\n isSelected: isEnhancedAgentSelected,\n },\n ],\n [formatMessage, isEnhancedAgentSelected],\n );\n\n // BoxAiAgentSelectorWithApiContainer expects a function that returns a Promise<AgentListResponse>\n // Since we're passing in our own agents, we don't need to make an API call,\n // so we wrap the store data in a Promise to satisfy the component's interface requirements.\n const agentFetcher = useCallback(() => {\n return Promise.resolve({ agents });\n }, [agents]);\n\n const handleAgentSelect = useCallback(\n (agent: AgentType | null) => {\n if (onAIAgentSelect) {\n onAIAgentSelect(agent);\n }\n },\n [onAIAgentSelect],\n );\n\n return canEdit ? (\n <>\n {isExistingCascadePolicy && (\n <InlineNotice\n variant=\"info\"\n variantIconAriaLabel={formatMessage(messages.cascadePolicyOptionsDisabledNoticeIconAriaLabel)}\n >\n <FormattedMessage {...messages.cascadePolicyOptionsDisabledNotice} />\n </InlineNotice>\n )}\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascade-enable\" data-testid=\"metadata-cascade-enable\">\n <div>\n <FormattedMessage tagName=\"strong\" {...messages.enableCascadePolicy} />\n {!isCustomMetadata && (\n <Toggle\n aria-label={formatMessage(messages.enableCascadePolicy)}\n className={`metadata-cascade-toggle ${\n isCascadingEnabled ? 'cascade-on' : 'cascade-off'\n }`}\n isOn={isCascadingEnabled}\n label=\"\"\n onChange={e => onCascadeToggle(e.target.checked)}\n />\n )}\n </div>\n {!isCustomMetadata ? (\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.applyCascadePolicyText} />\n \n <Link className=\"cascade-policy-link\" href={COMMUNITY_LINK} target=\"_blank\">\n <FormattedMessage {...messages.cascadePolicyLearnMore} />\n </Link>\n </div>\n ) : (\n <div>\n <FormattedMessage {...messages.cannotApplyCascadePolicyText} />\n </div>\n )}\n </div>\n </div>\n {shouldShowCascadeOptions && (\n <div className=\"metadata-cascade-editor\">\n <div className=\"metadata-cascading-mode\">\n <FormattedMessage {...messages.cascadePolicyModeQuestion} />\n\n <div className=\"metadata-operation-not-immediate\">\n <IconAlertDefault />\n <span>\n <FormattedMessage {...messages.operationNotImmediate} />\n </span>\n </div>\n <RadioGroup\n className=\"metadata-cascading-options\"\n onChange={e => onCascadeModeChange(e.target.value === 'overwrite')}\n value={isCascadingOverwritten ? 'overwrite' : 'skip'}\n >\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicySkipMode} />}\n value=\"skip\"\n />\n <RadioButton\n isDisabled={isExistingCascadePolicy}\n label={<FormattedMessage {...messages.cascadePolicyOverwriteMode} />}\n value=\"overwrite\"\n />\n </RadioGroup>\n </div>\n </div>\n )}\n {shouldShowCascadeOptions && canUseAIFolderExtraction && (\n <div className=\"metadata-cascade-editor\" data-testid=\"ai-folder-extraction\">\n <div className=\"metadata-cascade-enable\">\n <div>\n <BoxAiColor className=\"metadata-cascade-ai-logo\" width={16} height={16} />\n <FormattedMessage tagName=\"strong\" {...messages.enableAIAutofill} />\n <Toggle\n aria-label={formatMessage(messages.enableAIAutofill)}\n className=\"metadata-cascade-toggle\"\n isOn={isAIFolderExtractionEnabled}\n isDisabled={isExistingCascadePolicy}\n label=\"\"\n onChange={e => onAIFolderExtractionToggle(e.target.checked)}\n />\n </div>\n <div className=\"cascade-policy-text\">\n <FormattedMessage {...messages.aiAutofillDescription} />\n \n <Link className=\"cascade-policy-link\" href={AI_LINK} target=\"_blank\">\n <FormattedMessage {...messages.aiAutofillLearnMore} />\n </Link>\n </div>\n {isAIFolderExtractionEnabled && (\n <div className=\"metadata-cascade-ai-agent-selector\">\n <BoxAiAgentSelectorWithApiContainer\n disabled={isExistingCascadePolicy}\n fetcher={agentFetcher}\n onSelectAgent={handleAgentSelect}\n recordAction={() => {}}\n selectorAlignment=\"left\"\n />\n </div>\n )}\n </div>\n </div>\n )}\n </>\n ) : (\n readOnlyState\n );\n};\n\nexport default CascadePolicy;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -584,7 +584,6 @@ class Instance extends React.PureComponent {
|
|
|
584
584
|
render() {
|
|
585
585
|
const {
|
|
586
586
|
canUseAIFolderExtraction = false,
|
|
587
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
588
587
|
cascadePolicy = {},
|
|
589
588
|
isDirty,
|
|
590
589
|
isCascadingPolicyApplicable,
|
|
@@ -641,7 +640,6 @@ class Instance extends React.PureComponent {
|
|
|
641
640
|
cascadePolicyConfiguration: cascadePolicy?.cascadePolicyConfiguration,
|
|
642
641
|
canEdit: isEditing && !!cascadePolicy.canEdit,
|
|
643
642
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
644
|
-
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
645
643
|
isAIFolderExtractionEnabled: isAIFolderExtractionEnabled,
|
|
646
644
|
isCascadingEnabled: isCascadingEnabled,
|
|
647
645
|
isCascadingOverwritten: isCascadingOverwritten,
|
|
@@ -55,7 +55,6 @@ import './Instance.scss';
|
|
|
55
55
|
type Props = {
|
|
56
56
|
canEdit: boolean,
|
|
57
57
|
canUseAIFolderExtraction?: boolean,
|
|
58
|
-
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
59
58
|
cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line
|
|
60
59
|
data: MetadataFields,
|
|
61
60
|
hasError: boolean,
|
|
@@ -642,7 +641,6 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
642
641
|
render() {
|
|
643
642
|
const {
|
|
644
643
|
canUseAIFolderExtraction = false,
|
|
645
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
646
644
|
cascadePolicy = {},
|
|
647
645
|
isDirty,
|
|
648
646
|
isCascadingPolicyApplicable,
|
|
@@ -703,9 +701,6 @@ class Instance extends React.PureComponent<Props, State> {
|
|
|
703
701
|
cascadePolicyConfiguration={cascadePolicy?.cascadePolicyConfiguration}
|
|
704
702
|
canEdit={isEditing && !!cascadePolicy.canEdit}
|
|
705
703
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
706
|
-
canUseAIFolderExtractionAgentSelector={
|
|
707
|
-
canUseAIFolderExtractionAgentSelector
|
|
708
|
-
}
|
|
709
704
|
isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}
|
|
710
705
|
isCascadingEnabled={isCascadingEnabled}
|
|
711
706
|
isCascadingOverwritten={isCascadingOverwritten}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","ENHANCED_AGENT_CONFIGURATION","ENHANCED_AGENT_ID","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","cascadePolicyConfiguration","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","agent","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","canUseAIFolderExtractionAgentSelector","isOpen","animationDuration","isExistingCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIAgentSelect","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport type { AgentType } from '@box/box-ai-agent-selector';\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport {\n CASCADE_POLICY_TYPE_AI_EXTRACT,\n TEMPLATE_CUSTOM_PROPERTIES,\n ENHANCED_AGENT_CONFIGURATION,\n ENHANCED_AGENT_ID,\n} from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadePolicyConfiguration,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n canUseAIFolderExtractionAgentSelector?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n cascadePolicyConfiguration: MetadataCascadePolicyConfiguration | null,\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n cascadePolicyConfiguration,\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n cascadePolicyConfiguration,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Handles the selection of an AI agent\n * @param {AgentType | null} agent - The selected agent\n */\n onAIAgentSelect = (agent: AgentType | null): void => {\n // '2' is the id for the enhanced agent\n if (agent && agent.id === ENHANCED_AGENT_ID) {\n this.setState({\n cascadePolicyConfiguration: {\n agent: ENHANCED_AGENT_CONFIGURATION,\n },\n });\n } else {\n this.setState({ cascadePolicyConfiguration: null });\n }\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n cascadePolicyConfiguration: null,\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n canUseAIFolderExtractionAgentSelector = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n cascadePolicyConfiguration={cascadePolicy?.cascadePolicyConfiguration}\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n canUseAIFolderExtractionAgentSelector={\n canUseAIFolderExtractionAgentSelector\n }\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingCascadePolicy={isExistingCascadePolicy}\n onAIAgentSelect={this.onAIAgentSelect}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Instance.js","names":["React","injectIntl","FormattedMessage","classNames","isEqual","cloneDeep","noop","Collapsible","Form","LoadingIndicatorWrapper","PlainButton","Tooltip","IconMetadataColored","IconAlertCircle","IconEdit","bdlWatermelonRed","scrollIntoView","CascadePolicy","TemplatedInstance","CustomInstance","MetadataInstanceConfirmDialog","Footer","messages","FIELD_TYPE_FLOAT","FIELD_TYPE_INTEGER","CASCADE_POLICY_TYPE_AI_EXTRACT","TEMPLATE_CUSTOM_PROPERTIES","ENHANCED_AGENT_CONFIGURATION","ENHANCED_AGENT_ID","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","isValidValue","isHidden","RESIN_TAG_TARGET","createFieldKeyToTypeMap","fields","reduce","prev","key","type","getValue","data","value","parseFloat","parseInt","Instance","PureComponent","constructor","props","_defineProperty","id","onModification","setState","getState","shouldConfirmRemove","isEditing","onRemove","isBusy","cascadePolicy","originalData","isDirty","isCascadingPolicyApplicable","onSave","cascadePolicyConfiguration","currentData","errors","isAIFolderExtractionEnabled","isCascadingEnabled","isCascadingOverwritten","state","Object","keys","length","createJSONPatch","canEdit","undefined","isEnabled","overwrite","isValid","finalErrors","_objectSpread","finalData","createElement","invalidInput","setDirty","shouldShowCascadeOptions","agent","isFile","template","message","isProperties","templateKey","_extends","values","metadataName","displayName","hasDataChanged","hasCascadingChanged","isCascadingEnabledThroughProps","isAIFolderExtractionEnabledThroughProps","createRef","prevState","intl","editClassName","metadataLabelEditText","formatMessage","metadataEditTooltip","position","text","className","onClick","toggleIsEditing","fieldKeyToTypeMap","componentDidUpdate","hasError","prevHasError","prevIsDirty","currentElement","collapsibleRef","current","block","behavior","getTitle","customTitle","color","getConfirmationMessage","renderDeleteMessage","cascadePolicyType","ops","forEach","originalValue","path","prototype","hasOwnProperty","call","push","op","render","canUseAIFolderExtraction","isOpen","animationDuration","isExistingCascadePolicy","ref","buttonProps","hasStickyHeader","headerActionItems","renderEditButton","isBordered","title","isLoading","confirmationMessage","onCancel","onConfirmCancel","onConfirm","onValidSubmit","isCustomMetadata","onAIAgentSelect","onAIFolderExtractionToggle","onCascadeModeChange","onCascadeToggle","onFieldChange","onFieldRemove","isDisabled","onConfirmRemove","showSave","InstanceBase"],"sources":["../../../src/features/metadata-instance-editor/Instance.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport cloneDeep from 'lodash/cloneDeep';\nimport noop from 'lodash/noop';\n\nimport type { AgentType } from '@box/box-ai-agent-selector';\nimport Collapsible from '../../components/collapsible/Collapsible';\nimport Form from '../../components/form-elements/form/Form';\nimport LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport IconMetadataColored from '../../icons/general/IconMetadataColored';\nimport IconAlertCircle from '../../icons/general/IconAlertCircle';\nimport IconEdit from '../../icons/general/IconEdit';\nimport { bdlWatermelonRed } from '../../styles/variables';\nimport { scrollIntoView } from '../../utils/dom';\n\nimport CascadePolicy from './CascadePolicy';\nimport TemplatedInstance from './TemplatedInstance';\nimport CustomInstance from './CustomInstance';\nimport MetadataInstanceConfirmDialog from './MetadataInstanceConfirmDialog';\nimport Footer from './Footer';\nimport messages from './messages';\nimport { FIELD_TYPE_FLOAT, FIELD_TYPE_INTEGER } from '../metadata-instance-fields/constants';\nimport {\n CASCADE_POLICY_TYPE_AI_EXTRACT,\n TEMPLATE_CUSTOM_PROPERTIES,\n ENHANCED_AGENT_CONFIGURATION,\n ENHANCED_AGENT_ID,\n} from './constants';\nimport {\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n} from '../../common/constants';\nimport { isValidValue } from '../metadata-instance-fields/validateMetadataField';\nimport { isHidden } from './metadataUtil';\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport type {\n MetadataFields,\n MetadataTemplate,\n MetadataCascadePolicy,\n MetadataCascadePolicyConfiguration,\n MetadataCascadingPolicyData,\n MetadataTemplateField,\n MetadataFieldValue,\n} from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\nimport './Instance.scss';\n\ntype Props = {\n canEdit: boolean,\n canUseAIFolderExtraction?: boolean,\n cascadePolicy?: MetadataCascadePolicy, // eslint-disable-line\n data: MetadataFields,\n hasError: boolean,\n id: string,\n intl: Object,\n isCascadingPolicyApplicable?: boolean,\n isDirty: boolean,\n isOpen: boolean,\n onModification?: (id: string, isDirty: boolean, type?: string) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n template: MetadataTemplate,\n};\n\ntype State = {\n cascadePolicyConfiguration: MetadataCascadePolicyConfiguration | null,\n data: Object,\n errors: { [string]: React.Node },\n isAIFolderExtractionEnabled: boolean,\n isBusy: boolean,\n isCascadingEnabled: boolean,\n isCascadingOverwritten: boolean,\n isEditing: boolean,\n shouldConfirmRemove: boolean,\n shouldShowCascadeOptions: boolean,\n};\n\nconst createFieldKeyToTypeMap = (fields?: Array<MetadataTemplateField> = []) =>\n fields.reduce((prev, { key, type }) => {\n prev[key] = type;\n return prev;\n }, {});\n\nconst getValue = (data: Object, key: string, type: string) => {\n const value = data[key];\n\n switch (type) {\n case FIELD_TYPE_FLOAT:\n return parseFloat(value);\n\n case FIELD_TYPE_INTEGER:\n return parseInt(value, 10);\n\n default:\n return value;\n }\n};\n\nclass Instance extends React.PureComponent<Props, State> {\n static defaultProps = {\n data: {},\n isDirty: false,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = this.getState(props);\n this.fieldKeyToTypeMap = createFieldKeyToTypeMap(props.template.fields);\n }\n\n componentDidUpdate({ hasError: prevHasError, isDirty: prevIsDirty }: Props, prevState: State): void {\n const currentElement = this.collapsibleRef.current;\n const { hasError, isDirty }: Props = this.props;\n const { isEditing }: State = prevState;\n\n if (currentElement && this.state.shouldConfirmRemove) {\n scrollIntoView(currentElement, {\n block: 'start',\n behavior: 'smooth',\n });\n }\n\n if (hasError && hasError !== prevHasError) {\n // If hasError is true, which means an error occurred while\n // doing a network operation and hence hide the busy indicator\n // Saving also disables isEditing, so need to enable that back.\n // isDirty remains as it was before.\n this.setState({ isBusy: false, isEditing: true });\n } else if (prevIsDirty && !isDirty) {\n // If the form was dirty and now its not dirty\n // we know a successful save may have happened.\n // We don't modify isEditing here because we maintain the\n // prior state for that. If we came here from a save\n // success then save already disabled isEditing.\n if (isEditing) {\n // We are still editing so don't reset it\n this.setState({ isBusy: false });\n } else {\n // For a successfull save we reset cascading overwrite radio\n this.setState({ isBusy: false, isCascadingOverwritten: false });\n }\n }\n }\n\n /**\n * Undo any changes made\n *\n * @return {void}\n */\n onCancel = (): void => {\n const { id, onModification }: Props = this.props;\n this.setState(this.getState(this.props));\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, false);\n }\n };\n\n /**\n * Allows a user to confirm metadata instance removal\n *\n * @return {void}\n */\n onConfirmRemove = (): void => {\n this.setState({ shouldConfirmRemove: true });\n };\n\n /**\n * Cancel the remove instance attempt\n *\n * @return {void}\n */\n onConfirmCancel = (): void => {\n this.setState({ shouldConfirmRemove: false });\n };\n\n /**\n * Removes an instance\n *\n * @return {void}\n */\n onRemove = (): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { id, onRemove }: Props = this.props;\n if (onRemove) {\n onRemove(id);\n this.setState({ isBusy: true });\n }\n };\n\n /**\n * Saves instance data\n *\n * @return {void}\n */\n onSave = (): void => {\n const {\n cascadePolicy,\n data: originalData,\n id,\n isDirty,\n isCascadingPolicyApplicable,\n onSave,\n }: Props = this.props;\n const {\n cascadePolicyConfiguration,\n data: currentData,\n errors,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n isCascadingOverwritten,\n }: State = this.state;\n\n if (!this.isEditing() || !isDirty || !onSave || Object.keys(errors).length) {\n return;\n }\n\n this.setState({\n isBusy: true,\n isEditing: false,\n // reset state if cascading policy is removed\n isAIFolderExtractionEnabled: isCascadingEnabled ? isAIFolderExtractionEnabled : false,\n });\n\n onSave(\n id,\n this.createJSONPatch(currentData, originalData),\n isCascadingPolicyApplicable\n ? {\n canEdit: cascadePolicy ? cascadePolicy.canEdit : false,\n id: cascadePolicy ? cascadePolicy.id : undefined,\n isEnabled: isCascadingEnabled,\n overwrite: isCascadingOverwritten,\n isAIFolderExtractionEnabled,\n cascadePolicyConfiguration,\n }\n : undefined,\n cloneDeep(currentData),\n );\n };\n\n /**\n * Updates a key value in the instance data\n *\n * @param {string} key - key to update\n * @param {FieldValue} value - value to update\n * @param {string} type - type of field\n * @return {void}\n */\n onFieldChange = (key: string, value: MetadataFieldValue, type: string): void => {\n const { data, errors }: State = this.state;\n\n // Don't do anything if data is the same or not in edit mode\n if (!this.isEditing() || isEqual(data[key], value)) {\n return;\n }\n\n const isValid = isValidValue(type, value);\n const finalErrors = { ...errors };\n const finalData = cloneDeep(data);\n finalData[key] = value;\n\n if (isValid) {\n delete finalErrors[key];\n } else {\n finalErrors[key] = <FormattedMessage {...messages.invalidInput} />;\n }\n\n this.setState({ data: finalData, errors: finalErrors }, () => {\n this.setDirty(type);\n });\n };\n\n /**\n * Removes a key from instance data\n *\n * @param {string} key - key to remove\n * @return {void}\n */\n onFieldRemove = (key: string): void => {\n if (!this.isEditing()) {\n return;\n }\n\n const { data, errors }: State = this.state;\n const finalData = cloneDeep(data);\n const finalErrors = { ...errors };\n delete finalData[key];\n delete finalErrors[key];\n this.setState({ data: finalData, errors: finalErrors }, this.setDirty);\n };\n\n /**\n * Toggle cascading policy\n *\n * @param {boolean} value - true when turned on\n * @return {void}\n */\n onCascadeToggle = (value: boolean) => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingEnabled: value,\n shouldShowCascadeOptions: value,\n },\n this.setDirty,\n );\n };\n\n /**\n * Changes the cascade mode.\n * isCascadingOverwritten is slways false to start off.\n *\n * @param {boolean} value - true when overwrite policy is chosen\n * @return {void}\n */\n onCascadeModeChange = (value: boolean): void => {\n const { isCascadingPolicyApplicable }: Props = this.props;\n if (!isCascadingPolicyApplicable) {\n return;\n }\n\n this.setState(\n {\n isCascadingOverwritten: value,\n },\n this.setDirty,\n );\n };\n\n onAIFolderExtractionToggle = (value: boolean) => {\n this.setState({ isAIFolderExtractionEnabled: value }, this.setDirty);\n };\n\n /**\n * Handles the selection of an AI agent\n * @param {AgentType | null} agent - The selected agent\n */\n onAIAgentSelect = (agent: AgentType | null): void => {\n // '2' is the id for the enhanced agent\n if (agent && agent.id === ENHANCED_AGENT_ID) {\n this.setState({\n cascadePolicyConfiguration: {\n agent: ENHANCED_AGENT_CONFIGURATION,\n },\n });\n } else {\n this.setState({ cascadePolicyConfiguration: null });\n }\n };\n\n /**\n * Returns the state from props\n *\n * @return {Object} - react state\n */\n getState(props: Props): State {\n const isCascadingEnabled = this.isCascadingEnabledThroughProps(props);\n\n return {\n cascadePolicyConfiguration: null,\n data: cloneDeep(props.data),\n errors: {},\n isAIFolderExtractionEnabled: this.isAIFolderExtractionEnabledThroughProps(props),\n isBusy: false,\n isCascadingEnabled,\n isCascadingOverwritten: false,\n isEditing: false,\n shouldConfirmRemove: false,\n shouldShowCascadeOptions: isCascadingEnabled,\n };\n }\n\n /**\n * Returns the card title with possible error mark\n *\n * @return {Object} - react title element\n */\n getTitle(): React.Node {\n const { cascadePolicy = {}, hasError, isCascadingPolicyApplicable, template }: Props = this.props;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n const type = isCascadingPolicyApplicable && cascadePolicy.id ? 'cascade' : 'default';\n\n return (\n <span className=\"metadata-instance-editor-instance-title\">\n <IconMetadataColored type={type} />\n <span\n className={classNames('metadata-instance-editor-instance-title-text', {\n 'metadata-instance-editor-instance-has-error': hasError,\n })}\n >\n {isProperties ? <FormattedMessage {...messages.customTitle} /> : template.displayName}\n </span>\n {hasError && <IconAlertCircle color={bdlWatermelonRed} />}\n </span>\n );\n }\n\n /**\n * Render the correct delete message to show based on custom metadata and file/folder metadata\n */\n renderDeleteMessage = (isFile: boolean, template: Object) => {\n let message;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n\n if (isProperties) {\n message = isFile ? 'fileMetadataRemoveCustomTemplateConfirm' : 'folderMetadataRemoveCustomTemplateConfirm';\n } else {\n message = isFile ? 'fileMetadataRemoveTemplateConfirm' : 'folderMetadataRemoveTemplateConfirm';\n }\n\n return (\n <FormattedMessage\n {...messages[message]}\n values={{\n metadataName: template.displayName,\n }}\n />\n );\n };\n\n /**\n * Get the delete confirmation message base on the template key\n */\n getConfirmationMessage(): React.Node {\n const { template, isCascadingPolicyApplicable }: Props = this.props;\n const isFile = !isCascadingPolicyApplicable;\n return this.renderDeleteMessage(isFile, template);\n }\n\n /**\n * Evaluates if the metadata was changed or cascading policy\n * altered or enabled.\n *\n * @return {void}\n */\n setDirty = (type?: string): void => {\n const { id, isCascadingPolicyApplicable, onModification }: Props = this.props;\n const { data, isCascadingEnabled, isCascadingOverwritten, isAIFolderExtractionEnabled } = this.state;\n const hasDataChanged = !isEqual(data, this.props.data);\n let hasCascadingChanged = false;\n\n if (isCascadingPolicyApplicable) {\n // isCascadingOverwritten always starts out as false, so true signifies a change\n hasCascadingChanged =\n isCascadingOverwritten ||\n isCascadingEnabled !== this.isCascadingEnabledThroughProps(this.props) ||\n isAIFolderExtractionEnabled !== this.isAIFolderExtractionEnabledThroughProps(this.props);\n }\n\n // Callback to parent to tell that something is dirty\n if (onModification) {\n onModification(id, hasDataChanged || hasCascadingChanged, type);\n }\n };\n\n collapsibleRef: {\n current: null | HTMLDivElement,\n } = React.createRef();\n\n fieldKeyToTypeMap: Object;\n\n /**\n * Determines if cascading policy is enabled through props based on\n * whether it has an id or not.\n *\n * @param {Object} props - component props\n * @return {boolean} true if cascading policy is enabled\n */\n isCascadingEnabledThroughProps(props: Props) {\n if (props.cascadePolicy) {\n return !!props.cascadePolicy.id;\n }\n return false;\n }\n\n /**\n * Determines if ai extraction is enabled based on\n * if cascade policy type is ai_extract\n *\n * @param {Object} props - component props\n * @return {boolean} true if ai extraction is enabled\n */\n isAIFolderExtractionEnabledThroughProps({ cascadePolicy }: Props) {\n return cascadePolicy?.cascadePolicyType === CASCADE_POLICY_TYPE_AI_EXTRACT;\n }\n\n /**\n * Toggles the edit mode\n *\n * @private\n * @return {void}\n */\n toggleIsEditing = (): void => {\n this.setState(prevState => ({\n isEditing: !prevState.isEditing,\n }));\n };\n\n /**\n * Creates JSON Patch operations from the passed in\n * data while comparing it to the original data from props.\n *\n * Only diffs at the root level and primitives.\n *\n * @param {*} currentData - the latest changes by the user\n * @param {*} originalData - the original values\n * @return {Array} - JSON patch operations\n */\n createJSONPatch(currentData: Object, originalData: Object): JSONPatchOperations {\n const ops = [];\n const data = cloneDeep(currentData); // clone the data for mutation\n\n // Iterate over the original data and find keys that have changed.\n // Also remove them from the data object to only leave new keys.\n Object.keys(originalData).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const originalValue = getValue(originalData, key, type);\n const path = `/${key}`;\n\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n const value = getValue(data, key, type);\n\n // Only register changed data\n if (!isEqual(value, originalValue)) {\n // Add a test OP for each replaces\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({\n op: JSON_PATCH_OP_REPLACE,\n path,\n value,\n });\n }\n } else {\n // Key was removed\n // Add a test OP for removes\n ops.push({\n op: JSON_PATCH_OP_TEST,\n path,\n value: originalValue,\n });\n ops.push({ op: JSON_PATCH_OP_REMOVE, path });\n }\n delete data[key];\n });\n\n // Iterate over the remaining keys that are new.\n Object.keys(data).forEach(key => {\n const type = this.fieldKeyToTypeMap[key];\n const value = getValue(data, key, type);\n\n ops.push({\n op: JSON_PATCH_OP_ADD,\n path: `/${key}`,\n value,\n });\n });\n\n return ops;\n }\n\n /**\n * Utility function to determine if instance is editable\n *\n * @return {boolean} true if editable\n */\n canEdit(): boolean {\n const { canEdit, onModification, onRemove, onSave }: Props = this.props;\n return (\n canEdit &&\n typeof onRemove === 'function' &&\n typeof onSave === 'function' &&\n typeof onModification === 'function'\n );\n }\n\n /**\n * Utility function to determine if instance is in edit mode\n *\n * @return {boolean} true if editing\n */\n isEditing(): boolean {\n const { isEditing }: State = this.state;\n return this.canEdit() && isEditing;\n }\n\n renderEditButton = () => {\n const { intl, isDirty }: Props = this.props;\n const { isBusy }: State = this.state;\n const canEdit = this.canEdit();\n const isEditing = this.isEditing();\n const editClassName = classNames('metadata-instance-editor-instance-edit', {\n 'metadata-instance-editor-instance-is-editing': isEditing,\n });\n\n if (canEdit && !isDirty && !isBusy) {\n const metadataLabelEditText = intl.formatMessage(messages.metadataEditTooltip);\n return (\n <Tooltip position=\"top-left\" text={metadataLabelEditText}>\n <PlainButton\n aria-label={metadataLabelEditText}\n aria-pressed={isEditing}\n className={editClassName}\n data-resin-target=\"metadata-instanceedit\"\n onClick={this.toggleIsEditing}\n type=\"button\"\n >\n <IconEdit />\n </PlainButton>\n </Tooltip>\n );\n }\n return null;\n };\n\n render() {\n const {\n canUseAIFolderExtraction = false,\n cascadePolicy = {},\n isDirty,\n isCascadingPolicyApplicable,\n isOpen,\n template,\n }: Props = this.props;\n const { fields = [] } = template;\n const {\n data,\n errors,\n isBusy,\n isAIFolderExtractionEnabled,\n isCascadingEnabled,\n shouldConfirmRemove,\n shouldShowCascadeOptions,\n isCascadingOverwritten,\n }: State = this.state;\n const isProperties = template.templateKey === TEMPLATE_CUSTOM_PROPERTIES;\n const isEditing = this.isEditing();\n\n if (!template || isHidden(template)) {\n return null;\n }\n\n // Animate short and tall cards at consistent speeds.\n const animationDuration = (fields.length + 1) * 50;\n\n const isExistingCascadePolicy = this.isCascadingEnabledThroughProps(this.props);\n\n return (\n <div ref={this.collapsibleRef}>\n <Collapsible\n animationDuration={animationDuration}\n buttonProps={{\n [RESIN_TAG_TARGET]: 'metadata-card',\n }}\n hasStickyHeader\n headerActionItems={this.renderEditButton()}\n isBordered\n isOpen={isOpen}\n title={this.getTitle()}\n >\n {shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <MetadataInstanceConfirmDialog\n confirmationMessage={this.getConfirmationMessage()}\n onCancel={this.onConfirmCancel}\n onConfirm={this.onRemove}\n />\n </LoadingIndicatorWrapper>\n )}\n {!shouldConfirmRemove && (\n <LoadingIndicatorWrapper isLoading={isBusy}>\n <Form onValidSubmit={isDirty ? this.onSave : noop}>\n <div className=\"metadata-instance-editor-instance\">\n {isCascadingPolicyApplicable && (\n <CascadePolicy\n cascadePolicyConfiguration={cascadePolicy?.cascadePolicyConfiguration}\n canEdit={isEditing && !!cascadePolicy.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n isAIFolderExtractionEnabled={isAIFolderExtractionEnabled}\n isCascadingEnabled={isCascadingEnabled}\n isCascadingOverwritten={isCascadingOverwritten}\n isCustomMetadata={isProperties}\n isExistingCascadePolicy={isExistingCascadePolicy}\n onAIAgentSelect={this.onAIAgentSelect}\n onAIFolderExtractionToggle={this.onAIFolderExtractionToggle}\n onCascadeModeChange={this.onCascadeModeChange}\n onCascadeToggle={this.onCascadeToggle}\n shouldShowCascadeOptions={shouldShowCascadeOptions}\n />\n )}\n {isProperties ? (\n <CustomInstance\n canEdit={isEditing}\n data={data}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n />\n ) : (\n <TemplatedInstance\n canEdit={isEditing}\n data={data}\n errors={errors}\n isDisabled={isAIFolderExtractionEnabled}\n onFieldChange={this.onFieldChange}\n onFieldRemove={this.onFieldRemove}\n template={template}\n />\n )}\n </div>\n {isEditing && (\n <Footer\n onCancel={this.onCancel}\n onRemove={this.onConfirmRemove}\n showSave={isDirty}\n />\n )}\n </Form>\n </LoadingIndicatorWrapper>\n )}\n </Collapsible>\n </div>\n );\n }\n}\n\nexport { Instance as InstanceBase };\nexport default injectIntl(Instance);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,6 @@ import * as React from 'react';
|
|
|
2
2
|
import Instance from './Instance';
|
|
3
3
|
const Instances = ({
|
|
4
4
|
canUseAIFolderExtraction = false,
|
|
5
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
6
5
|
isCascadingPolicyApplicable = false,
|
|
7
6
|
editors = [],
|
|
8
7
|
onModification,
|
|
@@ -22,7 +21,6 @@ const Instances = ({
|
|
|
22
21
|
return /*#__PURE__*/React.createElement(Instance, {
|
|
23
22
|
canEdit: instance.canEdit,
|
|
24
23
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
25
|
-
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
26
24
|
cascadePolicy: instance.cascadePolicy,
|
|
27
25
|
data: instance.data,
|
|
28
26
|
hasError: hasError,
|
|
@@ -7,7 +7,6 @@ import type { JSONPatchOperations } from '../../common/types/api';
|
|
|
7
7
|
|
|
8
8
|
type Props = {
|
|
9
9
|
canUseAIFolderExtraction?: boolean,
|
|
10
|
-
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
11
10
|
editors?: Array<MetadataEditor>,
|
|
12
11
|
isCascadingPolicyApplicable?: boolean,
|
|
13
12
|
onModification?: (id: string, isDirty: boolean) => void,
|
|
@@ -23,7 +22,6 @@ type Props = {
|
|
|
23
22
|
|
|
24
23
|
const Instances = ({
|
|
25
24
|
canUseAIFolderExtraction = false,
|
|
26
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
27
25
|
isCascadingPolicyApplicable = false,
|
|
28
26
|
editors = [],
|
|
29
27
|
onModification,
|
|
@@ -39,7 +37,6 @@ const Instances = ({
|
|
|
39
37
|
<Instance
|
|
40
38
|
canEdit={instance.canEdit}
|
|
41
39
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
42
|
-
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
43
40
|
cascadePolicy={instance.cascadePolicy}
|
|
44
41
|
data={instance.data}
|
|
45
42
|
hasError={hasError}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instances.js","names":["React","Instance","Instances","canUseAIFolderExtraction","
|
|
1
|
+
{"version":3,"file":"Instances.js","names":["React","Instance","Instances","canUseAIFolderExtraction","isCascadingPolicyApplicable","editors","onModification","onRemove","onSave","selectedTemplateKey","map","isDirty","instance","hasError","template","templateKey","isOpen","length","createElement","canEdit","cascadePolicy","data","id","key"],"sources":["../../../src/features/metadata-instance-editor/Instances.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\n\nimport Instance from './Instance';\nimport type { MetadataEditor, MetadataCascadingPolicyData } from '../../common/types/metadata';\nimport type { JSONPatchOperations } from '../../common/types/api';\n\ntype Props = {\n canUseAIFolderExtraction?: boolean,\n editors?: Array<MetadataEditor>,\n isCascadingPolicyApplicable?: boolean,\n onModification?: (id: string, isDirty: boolean) => void,\n onRemove?: (id: string) => void,\n onSave?: (\n id: string,\n data: JSONPatchOperations,\n cascadingPolicy?: MetadataCascadingPolicyData,\n rawData: Object,\n ) => void,\n selectedTemplateKey?: string,\n};\n\nconst Instances = ({\n canUseAIFolderExtraction = false,\n isCascadingPolicyApplicable = false,\n editors = [],\n onModification,\n onRemove,\n onSave,\n selectedTemplateKey,\n}: Props) =>\n editors.map<React.Element<typeof Instance>>(\n ({ isDirty = false, instance, hasError = false, template }: MetadataEditor) => {\n const { templateKey } = template;\n const isOpen = editors.length === 1 || templateKey === selectedTemplateKey;\n return (\n <Instance\n canEdit={instance.canEdit}\n canUseAIFolderExtraction={canUseAIFolderExtraction}\n cascadePolicy={instance.cascadePolicy}\n data={instance.data}\n hasError={hasError}\n id={instance.id}\n isCascadingPolicyApplicable={isCascadingPolicyApplicable}\n isDirty={isDirty}\n isOpen={isOpen}\n key={`${instance.id}-${templateKey}`}\n onModification={onModification}\n onSave={onSave}\n onRemove={onRemove}\n template={template}\n />\n );\n },\n );\n\nexport default Instances;\n"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,OAAOC,QAAQ,MAAM,YAAY;AAmBjC,MAAMC,SAAS,GAAGA,CAAC;EACfC,wBAAwB,GAAG,KAAK;EAChCC,2BAA2B,GAAG,KAAK;EACnCC,OAAO,GAAG,EAAE;EACZC,cAAc;EACdC,QAAQ;EACRC,MAAM;EACNC;AACG,CAAC,KACJJ,OAAO,CAACK,GAAG,CACP,CAAC;EAAEC,OAAO,GAAG,KAAK;EAAEC,QAAQ;EAAEC,QAAQ,GAAG,KAAK;EAAEC;AAAyB,CAAC,KAAK;EAC3E,MAAM;IAAEC;EAAY,CAAC,GAAGD,QAAQ;EAChC,MAAME,MAAM,GAAGX,OAAO,CAACY,MAAM,KAAK,CAAC,IAAIF,WAAW,KAAKN,mBAAmB;EAC1E,oBACIT,KAAA,CAAAkB,aAAA,CAACjB,QAAQ;IACLkB,OAAO,EAAEP,QAAQ,CAACO,OAAQ;IAC1BhB,wBAAwB,EAAEA,wBAAyB;IACnDiB,aAAa,EAAER,QAAQ,CAACQ,aAAc;IACtCC,IAAI,EAAET,QAAQ,CAACS,IAAK;IACpBR,QAAQ,EAAEA,QAAS;IACnBS,EAAE,EAAEV,QAAQ,CAACU,EAAG;IAChBlB,2BAA2B,EAAEA,2BAA4B;IACzDO,OAAO,EAAEA,OAAQ;IACjBK,MAAM,EAAEA,MAAO;IACfO,GAAG,EAAE,GAAGX,QAAQ,CAACU,EAAE,IAAIP,WAAW,EAAG;IACrCT,cAAc,EAAEA,cAAe;IAC/BE,MAAM,EAAEA,MAAO;IACfD,QAAQ,EAAEA,QAAS;IACnBO,QAAQ,EAAEA;EAAS,CACtB,CAAC;AAEV,CACJ,CAAC;AAEL,eAAeZ,SAAS","ignoreList":[]}
|
|
@@ -9,7 +9,6 @@ const MetadataInstanceEditor = ({
|
|
|
9
9
|
blurExceptionClassNames,
|
|
10
10
|
canAdd,
|
|
11
11
|
canUseAIFolderExtraction = false,
|
|
12
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
13
12
|
isCascadingPolicyApplicable = false,
|
|
14
13
|
isDropdownBusy,
|
|
15
14
|
editors = [],
|
|
@@ -37,7 +36,6 @@ const MetadataInstanceEditor = ({
|
|
|
37
36
|
canAdd: canAdd
|
|
38
37
|
}) : /*#__PURE__*/React.createElement(ScrollWrapper, null, /*#__PURE__*/React.createElement(Instances, {
|
|
39
38
|
canUseAIFolderExtraction: canUseAIFolderExtraction,
|
|
40
|
-
canUseAIFolderExtractionAgentSelector: canUseAIFolderExtractionAgentSelector,
|
|
41
39
|
editors: editors,
|
|
42
40
|
isCascadingPolicyApplicable: isCascadingPolicyApplicable,
|
|
43
41
|
onModification: onModification,
|
|
@@ -15,7 +15,6 @@ type Props = {
|
|
|
15
15
|
blurExceptionClassNames?: Array<string>,
|
|
16
16
|
canAdd: boolean,
|
|
17
17
|
canUseAIFolderExtraction?: boolean,
|
|
18
|
-
canUseAIFolderExtractionAgentSelector?: boolean,
|
|
19
18
|
editors?: Array<MetadataEditor>,
|
|
20
19
|
isCascadingPolicyApplicable?: boolean,
|
|
21
20
|
isDropdownBusy?: boolean,
|
|
@@ -38,7 +37,6 @@ const MetadataInstanceEditor = ({
|
|
|
38
37
|
blurExceptionClassNames,
|
|
39
38
|
canAdd,
|
|
40
39
|
canUseAIFolderExtraction = false,
|
|
41
|
-
canUseAIFolderExtractionAgentSelector = false,
|
|
42
40
|
isCascadingPolicyApplicable = false,
|
|
43
41
|
isDropdownBusy,
|
|
44
42
|
editors = [],
|
|
@@ -66,7 +64,6 @@ const MetadataInstanceEditor = ({
|
|
|
66
64
|
<ScrollWrapper>
|
|
67
65
|
<Instances
|
|
68
66
|
canUseAIFolderExtraction={canUseAIFolderExtraction}
|
|
69
|
-
canUseAIFolderExtractionAgentSelector={canUseAIFolderExtractionAgentSelector}
|
|
70
67
|
editors={editors}
|
|
71
68
|
isCascadingPolicyApplicable={isCascadingPolicyApplicable}
|
|
72
69
|
onModification={onModification}
|