box-ui-elements 23.5.0-beta.4 → 24.0.0-beta.1
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/constants.js +13 -0
- package/es/constants.js.flow +13 -0
- package/es/constants.js.map +1 -1
- package/es/elements/common/content-answers/ContentAnswersModal.js +1 -3
- package/es/elements/common/content-answers/ContentAnswersModal.js.map +1 -1
- package/es/elements/content-explorer/ContentExplorer.js +11 -5
- package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js +24 -3
- package/es/elements/content-explorer/stories/tests/MetadataView-visual.stories.js.map +1 -1
- package/es/elements/content-sidebar/BoxAISidebar.js.map +1 -1
- package/es/elements/content-sidebar/BoxAISidebarContent.js +2 -4
- package/es/elements/content-sidebar/BoxAISidebarContent.js.map +1 -1
- package/es/elements/content-sidebar/stories/BoxAISidebar.stories.js +0 -1
- package/es/elements/content-sidebar/stories/BoxAISidebar.stories.js.map +1 -1
- package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js +0 -1
- package/es/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.js.map +1 -1
- package/es/src/elements/common/content-answers/ContentAnswersModal.d.ts +0 -1
- package/es/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.d.ts +1 -0
- package/es/src/elements/content-sidebar/BoxAISidebar.d.ts +0 -1
- package/es/src/elements/content-sidebar/stories/BoxAISidebar.stories.d.ts +0 -1
- package/package.json +2 -2
- package/src/constants.js +13 -0
- package/src/elements/common/content-answers/ContentAnswersModal.tsx +0 -3
- package/src/elements/common/content-answers/__tests__/ContentAnswersModal.test.tsx +7 -2
- package/src/elements/content-explorer/ContentExplorer.tsx +15 -6
- package/src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx +17 -3
- package/src/elements/content-sidebar/BoxAISidebar.tsx +0 -1
- package/src/elements/content-sidebar/BoxAISidebarContent.tsx +1 -3
- package/src/elements/content-sidebar/__tests__/BoxAISidebar.test.tsx +0 -8
- package/src/elements/content-sidebar/stories/BoxAISidebar.stories.tsx +0 -1
- package/src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx +0 -1
|
@@ -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","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","sidePanelOpenWithSingleItemSelected","checkbox","metadataButton","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\nexport const sidePanelOpenWithSingleItemSelected: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n },\n },\n\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n\n // Select the first row by clicking its checkbox\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const checkbox = within(firstRow).getByRole('checkbox');\n await userEvent.click(checkbox);\n\n const metadataButton = canvas.getByRole('button', { name: 'Metadata' });\n await userEvent.click(metadataButton);\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":"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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","order_by","field_key","fields","key","direction","map","field","fieldsToShow","canEdit","displayName","columns","textValue","id","type","allowsSorting","minWidth","maxWidth","defaultView","metadataView","args","metadataViewV2ElementProps","metadataViewProps","features","contentExplorer","metadataViewV2","metadataViewV2SortsFromHeader","play","canvas","getByRole","name","toBeInTheDocument","firstRow","industryHeader","click","metadataViewV2WithCustomActions","_objectSpread","tableProps","isSelectAllEnabled","itemActionMenuProps","actions","label","onClick","icon","subMenuTrigger","subMenuActions","ellipsesButton","initialFilterActionBarProps","initialFilterValues","value","metadataViewV2WithInitialFilterValues","actionBarProps","toHaveTextContent","contactRoleChip","fileTypeChip","sidePanelOpenWithSingleItemSelected","checkbox","metadataButton","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 order_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 allowsSorting: 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 allowsSorting: 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\n// @TODO Assert that rows are actually sorted in a different order, once handleSortChange is implemented\nexport const metadataViewV2SortsFromHeader: Story = {\n args: metadataViewV2ElementProps,\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Industry/i })).toBeInTheDocument();\n });\n\n const firstRow = canvas.getByRole('row', { name: /Industry/i });\n const industryHeader = within(firstRow).getByRole('columnheader', { name: 'Industry' });\n userEvent.click(industryHeader);\n },\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\nexport const sidePanelOpenWithSingleItemSelected: Story = {\n args: {\n ...metadataViewV2ElementProps,\n metadataViewProps: {\n columns,\n tableProps: {\n isSelectAllEnabled: true,\n },\n },\n },\n\n play: async ({ canvas }) => {\n await waitFor(() => {\n expect(canvas.getByRole('row', { name: /Child 2/i })).toBeInTheDocument();\n });\n\n // Select the first row by clicking its checkbox\n const firstRow = canvas.getByRole('row', { name: /Child 2/i });\n const checkbox = within(firstRow).getByRole('checkbox');\n await userEvent.click(checkbox);\n\n const metadataButton = canvas.getByRole('button', { name: 'Metadata' });\n await userEvent.click(metadataButton);\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":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxAISidebar.js","names":["React","useIntl","AgentsProvider","BoxAISidebarContent","BoxAISidebarContext","SPREADSHEET_FILE_EXTENSIONS","messages","BoxAISidebar","props","cache","contentName","elementId","fileExtension","fileID","getSuggestedQuestions","isIntelligentQueryMode","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","localizedQuestions","onFeedbackFormSubmit","onUserInteraction","recordAction","renderRemoteModule","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","setHasQuestions","rest","_objectWithoutProperties","_excluded","questions","formatMessage","contextValue","useMemo","useEffect","length","questionsWithoutInProgress","isCompleted","slice","isSpreadsheet","includes","spreadsheetNotice","welcomeMessageSpreadsheetNotice","welcomeMessageIntelligentQueryNotice","handleSuggestedQuestionsFetched","fetchedSuggestedQuestions","suggestedQuestions","createElement","value","agents","Provider","_extends","cachedSuggestedQuestions","isOpen","itemID","itemIDs","onSuggestedQuestionsFetched","restoredQuestions","restoredSession","encodedSession","restoredShouldShowLandingPage","shouldShowLandingPage","warningNotice","warningNoticeAriaLabel","welcomeMessageSpreadsheetNoticeAriaLabel"],"sources":["../../../src/elements/content-sidebar/BoxAISidebar.tsx"],"sourcesContent":["/**\n * @file Box AI Sidebar Container\n * @author Box\n */\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { type FeedbackFormData, type ItemType, SuggestedQuestionType } from '@box/box-ai-content-answers';\nimport { AgentsProvider, RecordActionType } from '@box/box-ai-agent-selector';\nimport BoxAISidebarContent from './BoxAISidebarContent';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport { SPREADSHEET_FILE_EXTENSIONS } from '../common/content-answers/constants';\nimport type { BoxAISidebarCache, BoxAISidebarCacheSetter } from './types/BoxAISidebarTypes';\nimport messages from '../common/content-answers/messages';\n\nexport interface BoxAISidebarProps {\n contentName: string;\n cache: BoxAISidebarCache;\n createSessionRequest: (payload: Record<string, unknown>, itemID: string) => Promise<unknown>;\n elementId: string;\n fetchTimeout: Record<string, unknown>;\n fileExtension: string;\n fileID: string;\n getAgentConfig: (payload: Record<string, unknown>) => Promise<unknown>;\n getAIStudioAgents: () => Promise<unknown>;\n getAnswer: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getAnswerStreaming: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n abortController?: AbortController,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getSuggestedQuestions: (itemID: string) => Promise<unknown> | null;\n hostAppName: string;\n isAgentSelectorEnabled: boolean;\n isAIStudioAgentSelectorEnabled: boolean;\n isCitationsEnabled: boolean;\n isDebugModeEnabled: boolean;\n isFeedbackEnabled: boolean;\n isFeedbackFormEnabled: boolean;\n isIntelligentQueryMode: boolean;\n isMarkdownEnabled: boolean;\n isResetChatEnabled: boolean;\n isStopResponseEnabled?: boolean;\n isStreamingEnabled: boolean;\n items: Array<ItemType>;\n itemSize?: string;\n localizedQuestions: Array<{ id: string; label: string; prompt: string }>;\n onFeedbackFormSubmit?: (data: FeedbackFormData, onSuccess: () => void) => void;\n onUserInteraction?: () => void;\n recordAction: (params: RecordActionType) => void;\n setCacheValue: BoxAISidebarCacheSetter;\n shouldFeedbackFormIncludeFeedbackText?: boolean;\n renderRemoteModule?: (elementId: string) => React.ReactNode;\n shouldPreinitSession?: boolean;\n setHasQuestions: (hasQuestions: boolean) => void;\n}\n\nconst BoxAISidebar = (props: BoxAISidebarProps) => {\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n fileID,\n getSuggestedQuestions,\n isIntelligentQueryMode,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n localizedQuestions,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n renderRemoteModule,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession = true,\n setHasQuestions,\n ...rest\n } = props;\n const { questions } = cache;\n const { formatMessage } = useIntl();\n const contextValue = React.useMemo(\n () => ({\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n }),\n [\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n ],\n );\n\n React.useEffect(() => {\n if (setHasQuestions) {\n setHasQuestions(questions.length > 0);\n }\n }, [questions.length, setHasQuestions]);\n\n if (renderRemoteModule) {\n return renderRemoteModule(elementId);\n }\n\n let questionsWithoutInProgress = questions;\n if (questions.length > 0 && !questions[questions.length - 1].isCompleted) {\n // pass only fully completed questions to not show loading indicator of question where we canceled API request\n questionsWithoutInProgress = questionsWithoutInProgress.slice(0, -1);\n }\n\n const isSpreadsheet = SPREADSHEET_FILE_EXTENSIONS.includes(fileExtension);\n\n let spreadsheetNotice = isSpreadsheet ? formatMessage(messages.welcomeMessageSpreadsheetNotice) : '';\n if (isIntelligentQueryMode) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageIntelligentQueryNotice);\n } else if (isSpreadsheet) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageSpreadsheetNotice);\n }\n\n const handleSuggestedQuestionsFetched = (fetchedSuggestedQuestions: SuggestedQuestionType[]) => {\n setCacheValue('suggestedQuestions', fetchedSuggestedQuestions);\n };\n\n const suggestedQuestions = getSuggestedQuestions === null ? localizedQuestions : [];\n\n return (\n // BoxAISidebarContent is using withApiWrapper that is not passing all provided props,\n // that's why we need to use provider to pass other props\n <AgentsProvider value={cache.agents}>\n <BoxAISidebarContext.Provider value={contextValue}>\n <BoxAISidebarContent\n cachedSuggestedQuestions={cache.suggestedQuestions}\n getSuggestedQuestions={getSuggestedQuestions}\n isOpen\n isStopResponseEnabled={isStopResponseEnabled}\n itemID={fileID}\n itemIDs={[fileID]}\n onSuggestedQuestionsFetched={handleSuggestedQuestionsFetched}\n restoredQuestions={questionsWithoutInProgress}\n restoredSession={cache.encodedSession}\n restoredShouldShowLandingPage={cache.shouldShowLandingPage}\n shouldPreinitSession={shouldPreinitSession}\n suggestedQuestions={\n cache.suggestedQuestions.length > 0 ? cache.suggestedQuestions : suggestedQuestions\n }\n warningNotice={spreadsheetNotice}\n warningNoticeAriaLabel={formatMessage(messages.welcomeMessageSpreadsheetNoticeAriaLabel)}\n {...rest}\n />\n </BoxAISidebarContext.Provider>\n </AgentsProvider>\n );\n};\n\nexport default BoxAISidebar;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"BoxAISidebar.js","names":["React","useIntl","AgentsProvider","BoxAISidebarContent","BoxAISidebarContext","SPREADSHEET_FILE_EXTENSIONS","messages","BoxAISidebar","props","cache","contentName","elementId","fileExtension","fileID","getSuggestedQuestions","isIntelligentQueryMode","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","localizedQuestions","onFeedbackFormSubmit","onUserInteraction","recordAction","renderRemoteModule","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","setHasQuestions","rest","_objectWithoutProperties","_excluded","questions","formatMessage","contextValue","useMemo","useEffect","length","questionsWithoutInProgress","isCompleted","slice","isSpreadsheet","includes","spreadsheetNotice","welcomeMessageSpreadsheetNotice","welcomeMessageIntelligentQueryNotice","handleSuggestedQuestionsFetched","fetchedSuggestedQuestions","suggestedQuestions","createElement","value","agents","Provider","_extends","cachedSuggestedQuestions","isOpen","itemID","itemIDs","onSuggestedQuestionsFetched","restoredQuestions","restoredSession","encodedSession","restoredShouldShowLandingPage","shouldShowLandingPage","warningNotice","warningNoticeAriaLabel","welcomeMessageSpreadsheetNoticeAriaLabel"],"sources":["../../../src/elements/content-sidebar/BoxAISidebar.tsx"],"sourcesContent":["/**\n * @file Box AI Sidebar Container\n * @author Box\n */\nimport * as React from 'react';\nimport { useIntl } from 'react-intl';\nimport { type FeedbackFormData, type ItemType, SuggestedQuestionType } from '@box/box-ai-content-answers';\nimport { AgentsProvider, RecordActionType } from '@box/box-ai-agent-selector';\nimport BoxAISidebarContent from './BoxAISidebarContent';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport { SPREADSHEET_FILE_EXTENSIONS } from '../common/content-answers/constants';\nimport type { BoxAISidebarCache, BoxAISidebarCacheSetter } from './types/BoxAISidebarTypes';\nimport messages from '../common/content-answers/messages';\n\nexport interface BoxAISidebarProps {\n contentName: string;\n cache: BoxAISidebarCache;\n createSessionRequest: (payload: Record<string, unknown>, itemID: string) => Promise<unknown>;\n elementId: string;\n fetchTimeout: Record<string, unknown>;\n fileExtension: string;\n fileID: string;\n getAgentConfig: (payload: Record<string, unknown>) => Promise<unknown>;\n getAIStudioAgents: () => Promise<unknown>;\n getAnswer: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getAnswerStreaming: (\n payload: Record<string, unknown>,\n itemID?: string,\n itemIDs?: Array<string>,\n abortController?: AbortController,\n state?: Record<string, unknown>,\n ) => Promise<unknown>;\n getSuggestedQuestions: (itemID: string) => Promise<unknown> | null;\n hostAppName: string;\n isAgentSelectorEnabled: boolean;\n isAIStudioAgentSelectorEnabled: boolean;\n isCitationsEnabled: boolean;\n isDebugModeEnabled: boolean;\n isFeedbackEnabled: boolean;\n isFeedbackFormEnabled: boolean;\n isIntelligentQueryMode: boolean;\n isMarkdownEnabled: boolean;\n isStopResponseEnabled?: boolean;\n isStreamingEnabled: boolean;\n items: Array<ItemType>;\n itemSize?: string;\n localizedQuestions: Array<{ id: string; label: string; prompt: string }>;\n onFeedbackFormSubmit?: (data: FeedbackFormData, onSuccess: () => void) => void;\n onUserInteraction?: () => void;\n recordAction: (params: RecordActionType) => void;\n setCacheValue: BoxAISidebarCacheSetter;\n shouldFeedbackFormIncludeFeedbackText?: boolean;\n renderRemoteModule?: (elementId: string) => React.ReactNode;\n shouldPreinitSession?: boolean;\n setHasQuestions: (hasQuestions: boolean) => void;\n}\n\nconst BoxAISidebar = (props: BoxAISidebarProps) => {\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n fileID,\n getSuggestedQuestions,\n isIntelligentQueryMode,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n localizedQuestions,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n renderRemoteModule,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession = true,\n setHasQuestions,\n ...rest\n } = props;\n const { questions } = cache;\n const { formatMessage } = useIntl();\n const contextValue = React.useMemo(\n () => ({\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n }),\n [\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n ],\n );\n\n React.useEffect(() => {\n if (setHasQuestions) {\n setHasQuestions(questions.length > 0);\n }\n }, [questions.length, setHasQuestions]);\n\n if (renderRemoteModule) {\n return renderRemoteModule(elementId);\n }\n\n let questionsWithoutInProgress = questions;\n if (questions.length > 0 && !questions[questions.length - 1].isCompleted) {\n // pass only fully completed questions to not show loading indicator of question where we canceled API request\n questionsWithoutInProgress = questionsWithoutInProgress.slice(0, -1);\n }\n\n const isSpreadsheet = SPREADSHEET_FILE_EXTENSIONS.includes(fileExtension);\n\n let spreadsheetNotice = isSpreadsheet ? formatMessage(messages.welcomeMessageSpreadsheetNotice) : '';\n if (isIntelligentQueryMode) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageIntelligentQueryNotice);\n } else if (isSpreadsheet) {\n spreadsheetNotice = formatMessage(messages.welcomeMessageSpreadsheetNotice);\n }\n\n const handleSuggestedQuestionsFetched = (fetchedSuggestedQuestions: SuggestedQuestionType[]) => {\n setCacheValue('suggestedQuestions', fetchedSuggestedQuestions);\n };\n\n const suggestedQuestions = getSuggestedQuestions === null ? localizedQuestions : [];\n\n return (\n // BoxAISidebarContent is using withApiWrapper that is not passing all provided props,\n // that's why we need to use provider to pass other props\n <AgentsProvider value={cache.agents}>\n <BoxAISidebarContext.Provider value={contextValue}>\n <BoxAISidebarContent\n cachedSuggestedQuestions={cache.suggestedQuestions}\n getSuggestedQuestions={getSuggestedQuestions}\n isOpen\n isStopResponseEnabled={isStopResponseEnabled}\n itemID={fileID}\n itemIDs={[fileID]}\n onSuggestedQuestionsFetched={handleSuggestedQuestionsFetched}\n restoredQuestions={questionsWithoutInProgress}\n restoredSession={cache.encodedSession}\n restoredShouldShowLandingPage={cache.shouldShowLandingPage}\n shouldPreinitSession={shouldPreinitSession}\n suggestedQuestions={\n cache.suggestedQuestions.length > 0 ? cache.suggestedQuestions : suggestedQuestions\n }\n warningNotice={spreadsheetNotice}\n warningNoticeAriaLabel={formatMessage(messages.welcomeMessageSpreadsheetNoticeAriaLabel)}\n {...rest}\n />\n </BoxAISidebarContext.Provider>\n </AgentsProvider>\n );\n};\n\nexport default BoxAISidebar;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const _excluded = ["createSession", "encodedSession", "onClearAction", "onSelectedAgentCallback", "getAIStudioAgents", "hasRequestInProgress", "hostAppName", "isAIStudioAgentSelectorEnabled", "isLoading", "
|
|
1
|
+
const _excluded = ["createSession", "encodedSession", "onClearAction", "onSelectedAgentCallback", "getAIStudioAgents", "hasRequestInProgress", "hostAppName", "isAIStudioAgentSelectorEnabled", "isLoading", "onSelectAgent", "questions", "shouldShowLandingPage", "sendQuestion", "stopQuestion"];
|
|
2
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
3
|
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
4
4
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
@@ -38,7 +38,6 @@ function BoxAISidebarContent(props) {
|
|
|
38
38
|
hostAppName,
|
|
39
39
|
isAIStudioAgentSelectorEnabled,
|
|
40
40
|
isLoading,
|
|
41
|
-
isResetChatEnabled,
|
|
42
41
|
onSelectAgent,
|
|
43
42
|
questions,
|
|
44
43
|
shouldShowLandingPage,
|
|
@@ -172,7 +171,7 @@ function BoxAISidebarContent(props) {
|
|
|
172
171
|
variant: "sidebar"
|
|
173
172
|
})));
|
|
174
173
|
};
|
|
175
|
-
const renderActions = () => /*#__PURE__*/React.createElement(React.Fragment, null, renderBoxAISidebarTitle(),
|
|
174
|
+
const renderActions = () => /*#__PURE__*/React.createElement(React.Fragment, null, renderBoxAISidebarTitle(), /*#__PURE__*/React.createElement(ClearConversationButton, {
|
|
176
175
|
onClick: onClearAction
|
|
177
176
|
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
178
177
|
content: formatMessage(messages.sidebarBoxAISwitchToModalView),
|
|
@@ -224,7 +223,6 @@ function BoxAISidebarContent(props) {
|
|
|
224
223
|
isAIStudioAgentSelectorEnabled: isAIStudioAgentSelectorEnabled,
|
|
225
224
|
isFeedbackEnabled: isFeedbackEnabled,
|
|
226
225
|
isFeedbackFormEnabled: isFeedbackFormEnabled,
|
|
227
|
-
isResetChatEnabled: isResetChatEnabled,
|
|
228
226
|
isStopResponseEnabled: isStopResponseEnabled,
|
|
229
227
|
items: items,
|
|
230
228
|
itemSize: itemSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxAISidebarContent.js","names":["React","flow","useIntl","classNames","BoxAiAgentSelectorWithApi","useAgents","IconButton","Tooltip","ArrowsExpand","BoxAiContentAnswers","ClearConversationButton","IntelligenceModal","withApiWrapper","SidebarContent","withAPIContext","withErrorBoundary","withLogger","ORIGIN_BOXAI_SIDEBAR","SIDEBAR_VIEW_BOXAI","EVENT_JS_READY","mark","BoxAISidebarContext","BoxAISidebarTitle","messages","MARK_NAME_JS_READY","BoxAISidebarContent","props","createSession","encodedSession","onClearAction","onSelectedAgentCallback","getAIStudioAgents","hasRequestInProgress","hostAppName","isAIStudioAgentSelectorEnabled","isLoading","isResetChatEnabled","onSelectAgent","questions","shouldShowLandingPage","sendQuestion","stopQuestion","rest","_objectWithoutProperties","_excluded","formatMessage","isSessionInitiated","useRef","isModalOpen","setIsModalOpen","useState","cache","contentName","elementId","fileExtension","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","onFeedbackFormSubmit","onUserInteraction","recordAction","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","useContext","agents","requestState","selectedAgent","cacheQuestions","handleUserIntentToUseAI","userHasInteracted","handleModalClose","handleSwitchToModalClick","useEffect","length","isCompleted","prompt","action","component","feature","target","data","map","item","status","fileType","lastQuestion","current","id","renderBoxAISidebarTitle","createElement","className","disabled","fetcher","onAgentsListOpen","shouldHideAgentSelectorOnLoad","variant","renderActions","Fragment","onClick","content","sidebarBoxAISwitchToModalView","icon","size","actions","sidebarView","_extends","contentType","sidebarBoxAIContent","onUserIntentToUseAI","showLoadingIndicator","submitQuestion","extension","onOpenChange","open","undefined","stopPropagationOnEsc","shouldRenderProviders","BoxAISidebarComponent","BoxAISidebarContentDefaultExport"],"sources":["../../../src/elements/content-sidebar/BoxAISidebarContent.tsx"],"sourcesContent":["/**\n * @file Box AI sidebar component\n * @author Box\n */\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\nimport classNames from 'classnames';\nimport { BoxAiAgentSelectorWithApi, useAgents, type AgentType } from '@box/box-ai-agent-selector';\nimport { IconButton, Tooltip } from '@box/blueprint-web';\nimport { ArrowsExpand } from '@box/blueprint-web-assets/icons/Fill';\nimport {\n BoxAiContentAnswers,\n ClearConversationButton,\n IntelligenceModal,\n withApiWrapper,\n type ApiWrapperWithInjectedProps,\n} from '@box/box-ai-content-answers';\nimport SidebarContent from './SidebarContent';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { ORIGIN_BOXAI_SIDEBAR, SIDEBAR_VIEW_BOXAI } from '../../constants';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport { mark } from '../../utils/performance';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport BoxAISidebarTitle from './BoxAISidebarTitle';\n\nimport messages from '../common/messages';\n\nimport './BoxAISidebar.scss';\n\nconst MARK_NAME_JS_READY: string = `${ORIGIN_BOXAI_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nfunction BoxAISidebarContent(\n props: ApiWrapperWithInjectedProps & {\n onSelectedAgentCallback: (selectedAgent: AgentType) => void;\n shouldShowLandingPage: boolean;\n },\n) {\n const {\n createSession,\n encodedSession,\n onClearAction,\n onSelectedAgentCallback,\n getAIStudioAgents,\n hasRequestInProgress,\n hostAppName,\n isAIStudioAgentSelectorEnabled,\n isLoading,\n isResetChatEnabled,\n onSelectAgent,\n questions,\n shouldShowLandingPage,\n sendQuestion,\n stopQuestion,\n ...rest\n } = props;\n const { formatMessage } = useIntl();\n const isSessionInitiated = React.useRef<boolean>(false);\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n } = React.useContext(BoxAISidebarContext);\n const { agents, requestState, selectedAgent } = useAgents();\n const { questions: cacheQuestions } = cache;\n\n if (cache.shouldShowLandingPage !== shouldShowLandingPage) {\n setCacheValue('shouldShowLandingPage', shouldShowLandingPage);\n }\n\n if (cache.encodedSession !== encodedSession) {\n setCacheValue('encodedSession', encodedSession);\n }\n\n if (cache.questions !== questions) {\n setCacheValue('questions', questions);\n }\n\n if (cache.agents.selectedAgent !== selectedAgent) {\n setCacheValue('agents', { agents, requestState, selectedAgent });\n }\n\n const handleUserIntentToUseAI = (userHasInteracted: boolean = false) => {\n // Create session if not already created or loading\n if (!shouldPreinitSession && !encodedSession && !isLoading && createSession) {\n createSession(true, false);\n }\n if (userHasInteracted && onUserInteraction) {\n onUserInteraction();\n }\n };\n\n const handleModalClose = () => {\n setIsModalOpen(false);\n };\n\n const handleSwitchToModalClick = () => {\n handleUserIntentToUseAI();\n setIsModalOpen(true);\n };\n\n React.useEffect(() => {\n if (shouldPreinitSession && !encodedSession && createSession) {\n createSession(true, true);\n }\n\n if (\n encodedSession &&\n cacheQuestions.length > 0 &&\n cacheQuestions[cacheQuestions.length - 1].isCompleted === false\n ) {\n // if we have cache with question that is not completed resend it to trigger an API\n sendQuestion({ prompt: cacheQuestions[cacheQuestions.length - 1].prompt });\n }\n\n if (recordAction) {\n recordAction({\n action: 'programmatic',\n component: 'sidebar',\n feature: 'answers',\n target: 'loaded',\n data: {\n items: items.map(item => {\n return { status: item.status, fileType: item.fileType };\n }),\n },\n });\n }\n\n return () => {\n // stop API request on unmount (e.g. during switching to another tab)\n stopQuestion();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resend the last question (if it was sent before session loaded) after (re-)initializing session\n React.useEffect(() => {\n const lastQuestion = cacheQuestions[cacheQuestions.length - 1];\n if (!shouldPreinitSession && !isSessionInitiated.current && encodedSession && lastQuestion?.isLoading) {\n sendQuestion(lastQuestion, selectedAgent, false);\n isSessionInitiated.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [encodedSession]);\n\n React.useEffect(() => {\n onSelectedAgentCallback?.(selectedAgent);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedAgent?.id]);\n\n const renderBoxAISidebarTitle = () => {\n return (\n <div className=\"bcs-BoxAISidebar-title-part\">\n <BoxAISidebarTitle isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled} />\n {isAIStudioAgentSelectorEnabled && (\n <div className=\"bcs-BoxAISidebar-agentSelector\">\n <BoxAiAgentSelectorWithApi\n disabled={hasRequestInProgress}\n fetcher={getAIStudioAgents}\n hostAppName={hostAppName}\n onAgentsListOpen={handleUserIntentToUseAI}\n onSelectAgent={onSelectAgent}\n recordAction={recordAction}\n shouldHideAgentSelectorOnLoad\n variant=\"sidebar\"\n />\n </div>\n )}\n </div>\n );\n };\n\n const renderActions = () => (\n <>\n {renderBoxAISidebarTitle()}\n {isResetChatEnabled && <ClearConversationButton onClick={onClearAction} />}\n <Tooltip content={formatMessage(messages.sidebarBoxAISwitchToModalView)} variant=\"standard\">\n <IconButton\n aria-label={formatMessage(messages.sidebarBoxAISwitchToModalView)}\n className=\"bcs-BoxAISidebar-expand\"\n data-target-id=\"IconButton-expandBoxAISidebar\"\n icon={ArrowsExpand}\n onClick={handleSwitchToModalClick}\n size=\"small\"\n />\n </Tooltip>\n </>\n );\n\n return (\n <>\n <SidebarContent\n actions={renderActions()}\n className={classNames('bcs-BoxAISidebar', { 'with-modal-open': isModalOpen })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n >\n <div className=\"bcs-BoxAISidebar-content\">\n <BoxAiContentAnswers\n className=\"bcs-BoxAISidebar-contentAnswers\"\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n questions={questions}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={isLoading && shouldPreinitSession}\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"sidebar\"\n recordAction={recordAction}\n {...rest}\n />\n </div>\n </SidebarContent>\n <IntelligenceModal\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n extension={fileExtension}\n getAIStudioAgents={getAIStudioAgents}\n hasRequestInProgress={hasRequestInProgress}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isResetChatEnabled={isResetChatEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n itemSize={itemSize}\n onClearAction={onClearAction}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onOpenChange={handleModalClose}\n onSelectAgent={onSelectAgent}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n open={isModalOpen}\n questions={questions}\n recordAction={isModalOpen ? recordAction : undefined}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={false}\n stopPropagationOnEsc\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"collapsible\"\n {...rest}\n shouldRenderProviders={false}\n />\n </>\n );\n}\n\nexport { BoxAISidebarContent as BoxAISidebarComponent };\n\nconst BoxAISidebarContentDefaultExport: typeof withAPIContext = flow([\n withLogger(ORIGIN_BOXAI_SIDEBAR),\n withErrorBoundary(ORIGIN_BOXAI_SIDEBAR),\n withAPIContext,\n withApiWrapper, // returns only props for Box AI, keep it at the end\n])(BoxAISidebarContent);\n\nexport default BoxAISidebarContentDefaultExport;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"BoxAISidebarContent.js","names":["React","flow","useIntl","classNames","BoxAiAgentSelectorWithApi","useAgents","IconButton","Tooltip","ArrowsExpand","BoxAiContentAnswers","ClearConversationButton","IntelligenceModal","withApiWrapper","SidebarContent","withAPIContext","withErrorBoundary","withLogger","ORIGIN_BOXAI_SIDEBAR","SIDEBAR_VIEW_BOXAI","EVENT_JS_READY","mark","BoxAISidebarContext","BoxAISidebarTitle","messages","MARK_NAME_JS_READY","BoxAISidebarContent","props","createSession","encodedSession","onClearAction","onSelectedAgentCallback","getAIStudioAgents","hasRequestInProgress","hostAppName","isAIStudioAgentSelectorEnabled","isLoading","onSelectAgent","questions","shouldShowLandingPage","sendQuestion","stopQuestion","rest","_objectWithoutProperties","_excluded","formatMessage","isSessionInitiated","useRef","isModalOpen","setIsModalOpen","useState","cache","contentName","elementId","fileExtension","isFeedbackEnabled","isFeedbackFormEnabled","isStopResponseEnabled","items","itemSize","onFeedbackFormSubmit","onUserInteraction","recordAction","setCacheValue","shouldFeedbackFormIncludeFeedbackText","shouldPreinitSession","useContext","agents","requestState","selectedAgent","cacheQuestions","handleUserIntentToUseAI","userHasInteracted","handleModalClose","handleSwitchToModalClick","useEffect","length","isCompleted","prompt","action","component","feature","target","data","map","item","status","fileType","lastQuestion","current","id","renderBoxAISidebarTitle","createElement","className","disabled","fetcher","onAgentsListOpen","shouldHideAgentSelectorOnLoad","variant","renderActions","Fragment","onClick","content","sidebarBoxAISwitchToModalView","icon","size","actions","sidebarView","_extends","contentType","sidebarBoxAIContent","onUserIntentToUseAI","showLoadingIndicator","submitQuestion","extension","onOpenChange","open","undefined","stopPropagationOnEsc","shouldRenderProviders","BoxAISidebarComponent","BoxAISidebarContentDefaultExport"],"sources":["../../../src/elements/content-sidebar/BoxAISidebarContent.tsx"],"sourcesContent":["/**\n * @file Box AI sidebar component\n * @author Box\n */\nimport * as React from 'react';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\nimport classNames from 'classnames';\nimport { BoxAiAgentSelectorWithApi, useAgents, type AgentType } from '@box/box-ai-agent-selector';\nimport { IconButton, Tooltip } from '@box/blueprint-web';\nimport { ArrowsExpand } from '@box/blueprint-web-assets/icons/Fill';\nimport {\n BoxAiContentAnswers,\n ClearConversationButton,\n IntelligenceModal,\n withApiWrapper,\n type ApiWrapperWithInjectedProps,\n} from '@box/box-ai-content-answers';\nimport SidebarContent from './SidebarContent';\nimport { withAPIContext } from '../common/api-context';\nimport { withErrorBoundary } from '../common/error-boundary';\nimport { withLogger } from '../common/logger';\nimport { ORIGIN_BOXAI_SIDEBAR, SIDEBAR_VIEW_BOXAI } from '../../constants';\nimport { EVENT_JS_READY } from '../common/logger/constants';\nimport { mark } from '../../utils/performance';\nimport { BoxAISidebarContext } from './context/BoxAISidebarContext';\nimport BoxAISidebarTitle from './BoxAISidebarTitle';\n\nimport messages from '../common/messages';\n\nimport './BoxAISidebar.scss';\n\nconst MARK_NAME_JS_READY: string = `${ORIGIN_BOXAI_SIDEBAR}_${EVENT_JS_READY}`;\n\nmark(MARK_NAME_JS_READY);\n\nfunction BoxAISidebarContent(\n props: ApiWrapperWithInjectedProps & {\n onSelectedAgentCallback: (selectedAgent: AgentType) => void;\n shouldShowLandingPage: boolean;\n },\n) {\n const {\n createSession,\n encodedSession,\n onClearAction,\n onSelectedAgentCallback,\n getAIStudioAgents,\n hasRequestInProgress,\n hostAppName,\n isAIStudioAgentSelectorEnabled,\n isLoading,\n onSelectAgent,\n questions,\n shouldShowLandingPage,\n sendQuestion,\n stopQuestion,\n ...rest\n } = props;\n const { formatMessage } = useIntl();\n const isSessionInitiated = React.useRef<boolean>(false);\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const {\n cache,\n contentName,\n elementId,\n fileExtension,\n isFeedbackEnabled,\n isFeedbackFormEnabled,\n isStopResponseEnabled,\n items,\n itemSize,\n onFeedbackFormSubmit,\n onUserInteraction,\n recordAction,\n setCacheValue,\n shouldFeedbackFormIncludeFeedbackText,\n shouldPreinitSession,\n } = React.useContext(BoxAISidebarContext);\n const { agents, requestState, selectedAgent } = useAgents();\n const { questions: cacheQuestions } = cache;\n\n if (cache.shouldShowLandingPage !== shouldShowLandingPage) {\n setCacheValue('shouldShowLandingPage', shouldShowLandingPage);\n }\n\n if (cache.encodedSession !== encodedSession) {\n setCacheValue('encodedSession', encodedSession);\n }\n\n if (cache.questions !== questions) {\n setCacheValue('questions', questions);\n }\n\n if (cache.agents.selectedAgent !== selectedAgent) {\n setCacheValue('agents', { agents, requestState, selectedAgent });\n }\n\n const handleUserIntentToUseAI = (userHasInteracted: boolean = false) => {\n // Create session if not already created or loading\n if (!shouldPreinitSession && !encodedSession && !isLoading && createSession) {\n createSession(true, false);\n }\n if (userHasInteracted && onUserInteraction) {\n onUserInteraction();\n }\n };\n\n const handleModalClose = () => {\n setIsModalOpen(false);\n };\n\n const handleSwitchToModalClick = () => {\n handleUserIntentToUseAI();\n setIsModalOpen(true);\n };\n\n React.useEffect(() => {\n if (shouldPreinitSession && !encodedSession && createSession) {\n createSession(true, true);\n }\n\n if (\n encodedSession &&\n cacheQuestions.length > 0 &&\n cacheQuestions[cacheQuestions.length - 1].isCompleted === false\n ) {\n // if we have cache with question that is not completed resend it to trigger an API\n sendQuestion({ prompt: cacheQuestions[cacheQuestions.length - 1].prompt });\n }\n\n if (recordAction) {\n recordAction({\n action: 'programmatic',\n component: 'sidebar',\n feature: 'answers',\n target: 'loaded',\n data: {\n items: items.map(item => {\n return { status: item.status, fileType: item.fileType };\n }),\n },\n });\n }\n\n return () => {\n // stop API request on unmount (e.g. during switching to another tab)\n stopQuestion();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resend the last question (if it was sent before session loaded) after (re-)initializing session\n React.useEffect(() => {\n const lastQuestion = cacheQuestions[cacheQuestions.length - 1];\n if (!shouldPreinitSession && !isSessionInitiated.current && encodedSession && lastQuestion?.isLoading) {\n sendQuestion(lastQuestion, selectedAgent, false);\n isSessionInitiated.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [encodedSession]);\n\n React.useEffect(() => {\n onSelectedAgentCallback?.(selectedAgent);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedAgent?.id]);\n\n const renderBoxAISidebarTitle = () => {\n return (\n <div className=\"bcs-BoxAISidebar-title-part\">\n <BoxAISidebarTitle isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled} />\n {isAIStudioAgentSelectorEnabled && (\n <div className=\"bcs-BoxAISidebar-agentSelector\">\n <BoxAiAgentSelectorWithApi\n disabled={hasRequestInProgress}\n fetcher={getAIStudioAgents}\n hostAppName={hostAppName}\n onAgentsListOpen={handleUserIntentToUseAI}\n onSelectAgent={onSelectAgent}\n recordAction={recordAction}\n shouldHideAgentSelectorOnLoad\n variant=\"sidebar\"\n />\n </div>\n )}\n </div>\n );\n };\n\n const renderActions = () => (\n <>\n {renderBoxAISidebarTitle()}\n <ClearConversationButton onClick={onClearAction} />\n <Tooltip content={formatMessage(messages.sidebarBoxAISwitchToModalView)} variant=\"standard\">\n <IconButton\n aria-label={formatMessage(messages.sidebarBoxAISwitchToModalView)}\n className=\"bcs-BoxAISidebar-expand\"\n data-target-id=\"IconButton-expandBoxAISidebar\"\n icon={ArrowsExpand}\n onClick={handleSwitchToModalClick}\n size=\"small\"\n />\n </Tooltip>\n </>\n );\n\n return (\n <>\n <SidebarContent\n actions={renderActions()}\n className={classNames('bcs-BoxAISidebar', { 'with-modal-open': isModalOpen })}\n elementId={elementId}\n sidebarView={SIDEBAR_VIEW_BOXAI}\n >\n <div className=\"bcs-BoxAISidebar-content\">\n <BoxAiContentAnswers\n className=\"bcs-BoxAISidebar-contentAnswers\"\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n questions={questions}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={isLoading && shouldPreinitSession}\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"sidebar\"\n recordAction={recordAction}\n {...rest}\n />\n </div>\n </SidebarContent>\n <IntelligenceModal\n contentName={contentName}\n contentType={formatMessage(messages.sidebarBoxAIContent)}\n extension={fileExtension}\n getAIStudioAgents={getAIStudioAgents}\n hasRequestInProgress={hasRequestInProgress}\n hostAppName={hostAppName}\n isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}\n isFeedbackEnabled={isFeedbackEnabled}\n isFeedbackFormEnabled={isFeedbackFormEnabled}\n isStopResponseEnabled={isStopResponseEnabled}\n items={items}\n itemSize={itemSize}\n onClearAction={onClearAction}\n onFeedbackFormSubmit={onFeedbackFormSubmit}\n onOpenChange={handleModalClose}\n onSelectAgent={onSelectAgent}\n onUserIntentToUseAI={handleUserIntentToUseAI}\n open={isModalOpen}\n questions={questions}\n recordAction={isModalOpen ? recordAction : undefined}\n shouldFeedbackFormIncludeFeedbackText={shouldFeedbackFormIncludeFeedbackText}\n shouldShowLandingPage={cache.shouldShowLandingPage}\n showLoadingIndicator={false}\n stopPropagationOnEsc\n stopQuestion={stopQuestion}\n submitQuestion={sendQuestion}\n variant=\"collapsible\"\n {...rest}\n shouldRenderProviders={false}\n />\n </>\n );\n}\n\nexport { BoxAISidebarContent as BoxAISidebarComponent };\n\nconst BoxAISidebarContentDefaultExport: typeof withAPIContext = flow([\n withLogger(ORIGIN_BOXAI_SIDEBAR),\n withErrorBoundary(ORIGIN_BOXAI_SIDEBAR),\n withAPIContext,\n withApiWrapper, // returns only props for Box AI, keep it at the end\n])(BoxAISidebarContent);\n\nexport default BoxAISidebarContentDefaultExport;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxAISidebar.stories.js","names":["ContentSidebar","mockFeatures","basic","withFileTypeNotSupported","args","features","boxai","sidebar","disabledTooltip","enabled","showOnlyNavButton","title","component","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isDebugModeEnabled","isFeedbackEnabled","isIntelligentQueryMode","isMarkdownEnabled","
|
|
1
|
+
{"version":3,"file":"BoxAISidebar.stories.js","names":["ContentSidebar","mockFeatures","basic","withFileTypeNotSupported","args","features","boxai","sidebar","disabledTooltip","enabled","showOnlyNavButton","title","component","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isDebugModeEnabled","isFeedbackEnabled","isIntelligentQueryMode","isMarkdownEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","name","type","fileType","status","recordAction"],"sources":["../../../../src/elements/content-sidebar/stories/BoxAISidebar.stories.tsx"],"sourcesContent":["import ContentSidebar from '../ContentSidebar';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic = {};\n\nexport const withFileTypeNotSupported = {\n args: {\n features: {\n boxai: {\n sidebar: {\n disabledTooltip: 'Box AI is not currently supported for this file type',\n enabled: true,\n showOnlyNavButton: true,\n },\n },\n },\n },\n};\n\nexport default {\n title: 'Elements/ContentSidebar/BoxAISidebar',\n component: ContentSidebar,\n args: {\n features: mockFeatures,\n fileId: global.FILE_ID,\n token: global.TOKEN,\n boxAISidebarProps: {\n createSessionRequest: () => ({ encodedSession: '1234' }),\n fetchTimeout: { initial: 20000 },\n getAgentConfig: () => ({}),\n getAIStudioAgents: () => ({}),\n getAnswer: () => ({}),\n getAnswerStreaming: () => ({}),\n getSuggestedQuestions: null,\n hostAppName: 'storybook-test',\n isAgentSelectorEnabled: false,\n isAIStudioAgentSelectorEnabled: true,\n isCitationsEnabled: true,\n isDebugModeEnabled: true,\n isFeedbackEnabled: true,\n isIntelligentQueryMode: false,\n isMarkdownEnabled: true,\n isStopResponseEnabled: true,\n isStreamingEnabled: false,\n items: [{ id: '123', name: 'Document (PDF).pdf', type: 'file', fileType: 'pdf', status: 'supported' }],\n recordAction: () => ({}),\n },\n },\n};\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,mBAAmB;AAE9C,MAAMC,YAAY,GAAG;EACjB,uBAAuB,EAAE;AAC7B,CAAC;AAED,OAAO,MAAMC,KAAK,GAAG,CAAC,CAAC;AAEvB,OAAO,MAAMC,wBAAwB,GAAG;EACpCC,IAAI,EAAE;IACFC,QAAQ,EAAE;MACNC,KAAK,EAAE;QACHC,OAAO,EAAE;UACLC,eAAe,EAAE,sDAAsD;UACvEC,OAAO,EAAE,IAAI;UACbC,iBAAiB,EAAE;QACvB;MACJ;IACJ;EACJ;AACJ,CAAC;AAED,eAAe;EACXC,KAAK,EAAE,sCAAsC;EAC7CC,SAAS,EAAEZ,cAAc;EACzBI,IAAI,EAAE;IACFC,QAAQ,EAAEJ,YAAY;IACtBY,MAAM,EAAEC,MAAM,CAACC,OAAO;IACtBC,KAAK,EAAEF,MAAM,CAACG,KAAK;IACnBC,iBAAiB,EAAE;MACfC,oBAAoB,EAAEA,CAAA,MAAO;QAAEC,cAAc,EAAE;MAAO,CAAC,CAAC;MACxDC,YAAY,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAChCC,cAAc,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC1BC,iBAAiB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC7BC,SAAS,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MACrBC,kBAAkB,EAAEA,CAAA,MAAO,CAAC,CAAC,CAAC;MAC9BC,qBAAqB,EAAE,IAAI;MAC3BC,WAAW,EAAE,gBAAgB;MAC7BC,sBAAsB,EAAE,KAAK;MAC7BC,8BAA8B,EAAE,IAAI;MACpCC,kBAAkB,EAAE,IAAI;MACxBC,kBAAkB,EAAE,IAAI;MACxBC,iBAAiB,EAAE,IAAI;MACvBC,sBAAsB,EAAE,KAAK;MAC7BC,iBAAiB,EAAE,IAAI;MACvBC,qBAAqB,EAAE,IAAI;MAC3BC,kBAAkB,EAAE,KAAK;MACzBC,KAAK,EAAE,CAAC;QAAEC,EAAE,EAAE,KAAK;QAAEC,IAAI,EAAE,oBAAoB;QAAEC,IAAI,EAAE,MAAM;QAAEC,QAAQ,EAAE,KAAK;QAAEC,MAAM,EAAE;MAAY,CAAC,CAAC;MACtGC,YAAY,EAAEA,CAAA,MAAO,CAAC,CAAC;IAC3B;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxAISidebar-visual.stories.js","names":["expect","within","http","HttpResponse","ContentSidebar","mockFileRequest","mockUserRequest","mockFeatures","basic","play","canvasElement","canvas","clearButton","findByRole","name","toBeInTheDocument","findByText","findByPlaceholderText","meta","title","component","args","features","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isFeedbackEnabled","isDebugModeEnabled","isIntelligentQueryMode","isMarkdownEnabled","
|
|
1
|
+
{"version":3,"file":"BoxAISidebar-visual.stories.js","names":["expect","within","http","HttpResponse","ContentSidebar","mockFileRequest","mockUserRequest","mockFeatures","basic","play","canvasElement","canvas","clearButton","findByRole","name","toBeInTheDocument","findByText","findByPlaceholderText","meta","title","component","args","features","fileId","global","FILE_ID","token","TOKEN","boxAISidebarProps","createSessionRequest","encodedSession","fetchTimeout","initial","getAgentConfig","getAIStudioAgents","getAnswer","getAnswerStreaming","getSuggestedQuestions","hostAppName","isAgentSelectorEnabled","isAIStudioAgentSelectorEnabled","isCitationsEnabled","isFeedbackEnabled","isDebugModeEnabled","isIntelligentQueryMode","isMarkdownEnabled","isStopResponseEnabled","isStreamingEnabled","items","id","type","fileType","status","localizedQuestions","label","prompt","recordAction","parameters","msw","handlers","get","url","json","response"],"sources":["../../../../../src/elements/content-sidebar/stories/tests/BoxAISidebar-visual.stories.tsx"],"sourcesContent":["import { type StoryObj, type Meta } from '@storybook/react';\nimport { expect, within } from 'storybook/test';\nimport { http, HttpResponse } from 'msw';\nimport type { HttpHandler } from 'msw';\nimport ContentSidebar from '../../ContentSidebar';\nimport BoxAISidebar from '../../BoxAISidebar';\nimport { mockFileRequest, mockUserRequest } from '../../../common/__mocks__/mockRequests';\n\nconst mockFeatures = {\n 'boxai.sidebar.enabled': true,\n};\n\nexport const basic: StoryObj<typeof BoxAISidebar> = {\n play: async ({ canvasElement }) => {\n const canvas = within(canvasElement);\n const clearButton = await canvas.findByRole('button', { name: 'Clear conversation' });\n expect(clearButton).toBeInTheDocument();\n\n expect(await canvas.findByText(/Welcome to Box AI/i)).toBeInTheDocument();\n expect(await canvas.findByText('Chat cleared when you close content')).toBeInTheDocument();\n expect(await canvas.findByPlaceholderText('Ask Box AI')).toBeInTheDocument();\n expect(await canvas.findByText('Summarize this document')).toBeInTheDocument();\n expect(await canvas.findByText('What are the key takeaways?')).toBeInTheDocument();\n expect(await canvas.findByText('How can this document be improved?')).toBeInTheDocument();\n expect(await canvas.findByText('Are there any next steps defined?')).toBeInTheDocument();\n },\n};\n\nconst meta: Meta<typeof ContentSidebar> & { parameters: { msw: { handlers: HttpHandler[] } } } = {\n title: 'Elements/ContentSidebar/BoxAISidebar/tests/visual-regression-tests',\n component: ContentSidebar,\n args: {\n features: mockFeatures,\n fileId: global.FILE_ID,\n token: global.TOKEN,\n boxAISidebarProps: {\n createSessionRequest: () => ({ encodedSession: '1234' }),\n fetchTimeout: { initial: 20000 },\n getAgentConfig: () => ({}),\n getAIStudioAgents: () => ({}),\n getAnswer: () => ({}),\n getAnswerStreaming: () => ({}),\n getSuggestedQuestions: null,\n hostAppName: 'storybook-test',\n isAgentSelectorEnabled: false,\n isAIStudioAgentSelectorEnabled: true,\n isCitationsEnabled: true,\n isFeedbackEnabled: true,\n isDebugModeEnabled: true,\n isIntelligentQueryMode: false,\n isMarkdownEnabled: true,\n isStopResponseEnabled: true,\n isStreamingEnabled: false,\n items: [{ id: '123', name: 'Document (PDF).pdf', type: 'file', fileType: 'pdf', status: 'supported' }],\n localizedQuestions: [\n {\n id: 'suggested-question-1',\n label: 'Summarize this document',\n prompt: 'Summarize this document',\n },\n {\n id: 'suggested-question-2',\n label: 'What are the key takeaways?',\n prompt: 'What are the key takeaways?',\n },\n {\n id: 'suggested-question-3',\n label: 'How can this document be improved?',\n prompt: 'How can this document be improved?',\n },\n {\n id: 'suggested-question-4',\n label: 'Are there any next steps defined?',\n prompt: 'Are there any next steps defined?',\n },\n ],\n recordAction: () => ({}),\n },\n },\n parameters: {\n msw: {\n handlers: [\n http.get(mockUserRequest.url, () => {\n return HttpResponse.json(mockUserRequest.response);\n }),\n http.get(mockFileRequest.url, () => {\n return HttpResponse.json(mockFileRequest.response);\n }),\n ],\n },\n },\n};\n\nexport default meta;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,6 @@ import { BoxItem } from '../../../common/types/core';
|
|
|
4
4
|
export interface ExternalProps {
|
|
5
5
|
isCitationsEnabled?: boolean;
|
|
6
6
|
isMarkdownEnabled?: boolean;
|
|
7
|
-
isResetChatEnabled?: boolean;
|
|
8
7
|
onAsk?: () => void;
|
|
9
8
|
onClearConversation?: () => void;
|
|
10
9
|
onRequestClose?: () => void;
|
|
@@ -3,6 +3,7 @@ import ContentExplorer from '../../ContentExplorer';
|
|
|
3
3
|
type Story = StoryObj<typeof ContentExplorer>;
|
|
4
4
|
export declare const metadataView: Story;
|
|
5
5
|
export declare const metadataViewV2: Story;
|
|
6
|
+
export declare const metadataViewV2SortsFromHeader: Story;
|
|
6
7
|
export declare const metadataViewV2WithCustomActions: Story;
|
|
7
8
|
export declare const metadataViewV2WithInitialFilterValues: Story;
|
|
8
9
|
export declare const sidePanelOpenWithSingleItemSelected: Story;
|
|
@@ -28,7 +28,6 @@ export interface BoxAISidebarProps {
|
|
|
28
28
|
isFeedbackFormEnabled: boolean;
|
|
29
29
|
isIntelligentQueryMode: boolean;
|
|
30
30
|
isMarkdownEnabled: boolean;
|
|
31
|
-
isResetChatEnabled: boolean;
|
|
32
31
|
isStopResponseEnabled?: boolean;
|
|
33
32
|
isStreamingEnabled: boolean;
|
|
34
33
|
items: Array<ItemType>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "box-ui-elements",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "24.0.0-beta.1",
|
|
4
4
|
"description": "Box UI Elements",
|
|
5
5
|
"author": "Box (https://www.box.com/)",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"@box/blueprint-web": "12.43.0",
|
|
132
132
|
"@box/blueprint-web-assets": "4.61.5",
|
|
133
133
|
"@box/box-ai-agent-selector": "^0.53.0",
|
|
134
|
-
"@box/box-ai-content-answers": "^0.
|
|
134
|
+
"@box/box-ai-content-answers": "^0.139.0",
|
|
135
135
|
"@box/box-item-type-selector": "^0.63.12",
|
|
136
136
|
"@box/cldr-data": "^34.2.0",
|
|
137
137
|
"@box/combobox-with-api": "^0.34.9",
|
package/src/constants.js
CHANGED
|
@@ -168,6 +168,19 @@ export const FIELD_CLASSIFICATION: 'classification' = 'classification';
|
|
|
168
168
|
export const FIELD_ENTERPRISE: 'enterprise' = 'enterprise';
|
|
169
169
|
export const FIELD_HOSTNAME: 'hostname' = 'hostname';
|
|
170
170
|
|
|
171
|
+
/* ----------------------- Item-Prefixed Fields for MD Query API --------------------------- */
|
|
172
|
+
const ITEM_PREFIX = 'item.';
|
|
173
|
+
export const FIELD_ITEM_TYPE = `${ITEM_PREFIX}${FIELD_TYPE}`;
|
|
174
|
+
export const FIELD_ITEM_NAME = `${ITEM_PREFIX}${FIELD_NAME}`;
|
|
175
|
+
export const FIELD_ITEM_DESCRIPTION = `${ITEM_PREFIX}${FIELD_DESCRIPTION}`;
|
|
176
|
+
export const FIELD_ITEM_EXTENSION = `${ITEM_PREFIX}${FIELD_EXTENSION}`;
|
|
177
|
+
export const FIELD_ITEM_OWNED_BY = `${ITEM_PREFIX}${FIELD_OWNED_BY}`;
|
|
178
|
+
export const FIELD_ITEM_CREATED_AT = `${ITEM_PREFIX}${FIELD_CREATED_AT}`;
|
|
179
|
+
export const FIELD_ITEM_MODIFIED_AT = `${ITEM_PREFIX}${FIELD_MODIFIED_AT}`;
|
|
180
|
+
export const FIELD_ITEM_CONTENT_CREATED_AT = `${ITEM_PREFIX}${FIELD_CONTENT_CREATED_AT}`;
|
|
181
|
+
export const FIELD_ITEM_CONTENT_MODIFIED_AT = `${ITEM_PREFIX}${FIELD_CONTENT_MODIFIED_AT}`;
|
|
182
|
+
export const FIELD_ITEM_QUICK_SEARCH_CONTENT = `${ITEM_PREFIX}quick_search_content`;
|
|
183
|
+
|
|
171
184
|
/* ----------------------- Permissions --------------------------- */
|
|
172
185
|
export const PERMISSION_CAN_COMMENT = 'can_comment';
|
|
173
186
|
export const PERMISSION_CAN_CREATE_ANNOTATIONS = 'can_create_annotations';
|
|
@@ -27,7 +27,6 @@ import messages from './messages';
|
|
|
27
27
|
export interface ExternalProps {
|
|
28
28
|
isCitationsEnabled?: boolean;
|
|
29
29
|
isMarkdownEnabled?: boolean;
|
|
30
|
-
isResetChatEnabled?: boolean;
|
|
31
30
|
onAsk?: () => void;
|
|
32
31
|
onClearConversation?: () => void;
|
|
33
32
|
onRequestClose?: () => void;
|
|
@@ -50,7 +49,6 @@ const ContentAnswersModal = ({
|
|
|
50
49
|
suggestedQuestions,
|
|
51
50
|
isCitationsEnabled = true,
|
|
52
51
|
isMarkdownEnabled = true,
|
|
53
|
-
isResetChatEnabled = true,
|
|
54
52
|
}: ContentAnswersModalProps) => {
|
|
55
53
|
const { formatMessage } = useIntl();
|
|
56
54
|
const [isLoading, setIsLoading] = useState<boolean>(false);
|
|
@@ -176,7 +174,6 @@ const ContentAnswersModal = ({
|
|
|
176
174
|
hasRequestInProgress={isLoading}
|
|
177
175
|
isCitationsEnabled={isCitationsEnabled}
|
|
178
176
|
isMarkdownEnabled={isMarkdownEnabled}
|
|
179
|
-
isResetChatEnabled={isResetChatEnabled}
|
|
180
177
|
onClearAction={handleClearConversation}
|
|
181
178
|
onOpenChange={handleOnRequestClose}
|
|
182
179
|
open={isOpen}
|
|
@@ -16,7 +16,12 @@ import {
|
|
|
16
16
|
import APIContext from '../../api-context';
|
|
17
17
|
|
|
18
18
|
describe('elements/common/content-answers/ContentAnswersModal', () => {
|
|
19
|
-
const mockQuestion = {
|
|
19
|
+
const mockQuestion = {
|
|
20
|
+
isCompleted: false,
|
|
21
|
+
isLoading: true,
|
|
22
|
+
prompt: 'summarize another question',
|
|
23
|
+
promptType: 'user_input',
|
|
24
|
+
};
|
|
20
25
|
const renderComponent = (api = mockApi, props?: {}) => {
|
|
21
26
|
render(
|
|
22
27
|
<Notification.Provider>
|
|
@@ -137,7 +142,7 @@ describe('elements/common/content-answers/ContentAnswersModal', () => {
|
|
|
137
142
|
await userEvent.click(submitButton);
|
|
138
143
|
|
|
139
144
|
expect(mockApi.getIntelligenceAPI().ask).lastCalledWith(
|
|
140
|
-
{ isCompleted: false, isLoading: true, prompt: 'Another question?' },
|
|
145
|
+
{ isCompleted: false, isLoading: true, prompt: 'Another question?', promptType: 'user_input' },
|
|
141
146
|
[{ id: mockFile.id, type: 'file' }],
|
|
142
147
|
[{ answer: 'summarize answer', created_at: '', prompt: 'summarize another question' }],
|
|
143
148
|
{
|
|
@@ -49,6 +49,7 @@ import {
|
|
|
49
49
|
DEFAULT_HOSTNAME_STATIC,
|
|
50
50
|
DEFAULT_SEARCH_DEBOUNCE,
|
|
51
51
|
SORT_ASC,
|
|
52
|
+
FIELD_ITEM_NAME,
|
|
52
53
|
FIELD_NAME,
|
|
53
54
|
FIELD_PERMISSIONS_CAN_SHARE,
|
|
54
55
|
FIELD_SHARED_LINK,
|
|
@@ -454,12 +455,6 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
|
|
|
454
455
|
metadataQueryClone.limit = DEFAULT_PAGE_SIZE;
|
|
455
456
|
}
|
|
456
457
|
|
|
457
|
-
metadataQueryClone.order_by = [
|
|
458
|
-
{
|
|
459
|
-
field_key: sortBy,
|
|
460
|
-
direction: sortDirection,
|
|
461
|
-
},
|
|
462
|
-
];
|
|
463
458
|
// Reset search state, the view and show busy indicator
|
|
464
459
|
this.setState({
|
|
465
460
|
searchQuery: '',
|
|
@@ -468,8 +463,22 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
|
|
|
468
463
|
});
|
|
469
464
|
|
|
470
465
|
if (isFeatureEnabled(features, 'contentExplorer.metadataViewV2')) {
|
|
466
|
+
metadataQueryClone.order_by = [
|
|
467
|
+
{
|
|
468
|
+
// Default to the prefixed name field for metadata view v2 only, while not touching the default sortBy for other views.
|
|
469
|
+
field_key: sortBy === FIELD_NAME ? FIELD_ITEM_NAME : sortBy,
|
|
470
|
+
direction: sortDirection,
|
|
471
|
+
},
|
|
472
|
+
];
|
|
473
|
+
|
|
471
474
|
this.metadataQueryAPIHelper = new MetadataQueryAPIHelperV2(this.api);
|
|
472
475
|
} else {
|
|
476
|
+
metadataQueryClone.order_by = [
|
|
477
|
+
{
|
|
478
|
+
field_key: sortBy,
|
|
479
|
+
direction: sortDirection,
|
|
480
|
+
},
|
|
481
|
+
];
|
|
473
482
|
this.metadataQueryAPIHelper = new MetadataQueryAPIHelper(this.api);
|
|
474
483
|
}
|
|
475
484
|
|
|
@@ -21,7 +21,7 @@ const metadataFieldNamePrefix = `metadata.${metadataScopeAndKey}`;
|
|
|
21
21
|
const metadataQuery = {
|
|
22
22
|
from: metadataScopeAndKey,
|
|
23
23
|
ancestor_folder_id: '0',
|
|
24
|
-
|
|
24
|
+
order_by: [
|
|
25
25
|
{
|
|
26
26
|
field_key: `${metadataFieldNamePrefix}.${mockSchema.fields[0].key}`, // Default to sorting by the first field in the schema
|
|
27
27
|
direction: 'asc',
|
|
@@ -49,7 +49,7 @@ const columns = [
|
|
|
49
49
|
textValue: 'Name',
|
|
50
50
|
id: 'name',
|
|
51
51
|
type: 'string',
|
|
52
|
-
|
|
52
|
+
allowsSorting: true,
|
|
53
53
|
minWidth: 150,
|
|
54
54
|
maxWidth: 150,
|
|
55
55
|
},
|
|
@@ -57,7 +57,7 @@ const columns = [
|
|
|
57
57
|
textValue: field.displayName,
|
|
58
58
|
id: `${metadataFieldNamePrefix}.${field.key}`,
|
|
59
59
|
type: field.type,
|
|
60
|
-
|
|
60
|
+
allowsSorting: true,
|
|
61
61
|
minWidth: 150,
|
|
62
62
|
maxWidth: 150,
|
|
63
63
|
})),
|
|
@@ -94,6 +94,20 @@ export const metadataViewV2: Story = {
|
|
|
94
94
|
args: metadataViewV2ElementProps,
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
+
// @TODO Assert that rows are actually sorted in a different order, once handleSortChange is implemented
|
|
98
|
+
export const metadataViewV2SortsFromHeader: Story = {
|
|
99
|
+
args: metadataViewV2ElementProps,
|
|
100
|
+
play: async ({ canvas }) => {
|
|
101
|
+
await waitFor(() => {
|
|
102
|
+
expect(canvas.getByRole('row', { name: /Industry/i })).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const firstRow = canvas.getByRole('row', { name: /Industry/i });
|
|
106
|
+
const industryHeader = within(firstRow).getByRole('columnheader', { name: 'Industry' });
|
|
107
|
+
userEvent.click(industryHeader);
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
97
111
|
export const metadataViewV2WithCustomActions: Story = {
|
|
98
112
|
args: {
|
|
99
113
|
...metadataViewV2ElementProps,
|
|
@@ -45,7 +45,6 @@ export interface BoxAISidebarProps {
|
|
|
45
45
|
isFeedbackFormEnabled: boolean;
|
|
46
46
|
isIntelligentQueryMode: boolean;
|
|
47
47
|
isMarkdownEnabled: boolean;
|
|
48
|
-
isResetChatEnabled: boolean;
|
|
49
48
|
isStopResponseEnabled?: boolean;
|
|
50
49
|
isStreamingEnabled: boolean;
|
|
51
50
|
items: Array<ItemType>;
|
|
@@ -50,7 +50,6 @@ function BoxAISidebarContent(
|
|
|
50
50
|
hostAppName,
|
|
51
51
|
isAIStudioAgentSelectorEnabled,
|
|
52
52
|
isLoading,
|
|
53
|
-
isResetChatEnabled,
|
|
54
53
|
onSelectAgent,
|
|
55
54
|
questions,
|
|
56
55
|
shouldShowLandingPage,
|
|
@@ -191,7 +190,7 @@ function BoxAISidebarContent(
|
|
|
191
190
|
const renderActions = () => (
|
|
192
191
|
<>
|
|
193
192
|
{renderBoxAISidebarTitle()}
|
|
194
|
-
|
|
193
|
+
<ClearConversationButton onClick={onClearAction} />
|
|
195
194
|
<Tooltip content={formatMessage(messages.sidebarBoxAISwitchToModalView)} variant="standard">
|
|
196
195
|
<IconButton
|
|
197
196
|
aria-label={formatMessage(messages.sidebarBoxAISwitchToModalView)}
|
|
@@ -248,7 +247,6 @@ function BoxAISidebarContent(
|
|
|
248
247
|
isAIStudioAgentSelectorEnabled={isAIStudioAgentSelectorEnabled}
|
|
249
248
|
isFeedbackEnabled={isFeedbackEnabled}
|
|
250
249
|
isFeedbackFormEnabled={isFeedbackFormEnabled}
|
|
251
|
-
isResetChatEnabled={isResetChatEnabled}
|
|
252
250
|
isStopResponseEnabled={isStopResponseEnabled}
|
|
253
251
|
items={items}
|
|
254
252
|
itemSize={itemSize}
|