box-ui-elements 24.0.0-beta.7 → 24.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/explorer.js +1 -1
  2. package/dist/openwith.js +1 -1
  3. package/dist/picker.js +1 -1
  4. package/dist/preview.js +1 -1
  5. package/dist/sharing.js +1 -1
  6. package/dist/sidebar.js +1 -1
  7. package/dist/uploader.js +1 -1
  8. package/es/constants.js +3 -1
  9. package/es/constants.js.flow +5 -0
  10. package/es/constants.js.map +1 -1
  11. package/es/elements/content-explorer/ContentExplorer.js +3 -2
  12. package/es/elements/content-explorer/ContentExplorer.js.map +1 -1
  13. package/es/elements/content-explorer/MetadataQueryAPIHelper.js +3 -11
  14. package/es/elements/content-explorer/MetadataQueryAPIHelper.js.map +1 -1
  15. package/es/elements/content-explorer/MetadataQueryBuilder.js +13 -23
  16. package/es/elements/content-explorer/MetadataQueryBuilder.js.map +1 -1
  17. package/es/elements/content-explorer/constants.js +0 -1
  18. package/es/elements/content-explorer/constants.js.map +1 -1
  19. package/es/elements/content-explorer/utils.js +5 -10
  20. package/es/elements/content-explorer/utils.js.map +1 -1
  21. package/es/elements/content-open-with/ContentOpenWith.js +3 -2
  22. package/es/elements/content-open-with/ContentOpenWith.js.flow +2 -0
  23. package/es/elements/content-open-with/ContentOpenWith.js.map +1 -1
  24. package/es/elements/content-picker/ContentPicker.js +3 -2
  25. package/es/elements/content-picker/ContentPicker.js.flow +2 -0
  26. package/es/elements/content-picker/ContentPicker.js.map +1 -1
  27. package/es/elements/content-preview/ContentPreview.js +3 -2
  28. package/es/elements/content-preview/ContentPreview.js.flow +2 -0
  29. package/es/elements/content-preview/ContentPreview.js.map +1 -1
  30. package/es/elements/content-sharing/ContentSharing.js +3 -2
  31. package/es/elements/content-sharing/ContentSharing.js.flow +2 -1
  32. package/es/elements/content-sharing/ContentSharing.js.map +1 -1
  33. package/es/elements/content-sidebar/ContentSidebar.js +3 -2
  34. package/es/elements/content-sidebar/ContentSidebar.js.flow +7 -1
  35. package/es/elements/content-sidebar/ContentSidebar.js.map +1 -1
  36. package/es/elements/content-uploader/ContentUploader.js +3 -2
  37. package/es/elements/content-uploader/ContentUploader.js.map +1 -1
  38. package/es/elements/wrappers/ES6Wrapper.js +0 -1
  39. package/es/elements/wrappers/ES6Wrapper.js.flow +0 -3
  40. package/es/elements/wrappers/ES6Wrapper.js.map +1 -1
  41. package/es/src/elements/content-explorer/constants.d.ts +0 -1
  42. package/es/src/elements/content-explorer/utils.d.ts +1 -2
  43. package/i18n/bn-IN.js +5 -5
  44. package/i18n/bn-IN.properties +5 -5
  45. package/i18n/da-DK.js +5 -5
  46. package/i18n/da-DK.properties +5 -5
  47. package/i18n/de-DE.js +6 -6
  48. package/i18n/de-DE.properties +6 -6
  49. package/i18n/en-AU.js +1 -1
  50. package/i18n/en-AU.properties +1 -1
  51. package/i18n/en-GB.js +1 -1
  52. package/i18n/en-GB.properties +1 -1
  53. package/i18n/es-419.js +6 -6
  54. package/i18n/es-419.properties +6 -6
  55. package/i18n/es-ES.js +6 -6
  56. package/i18n/es-ES.properties +6 -6
  57. package/i18n/fi-FI.js +5 -5
  58. package/i18n/fi-FI.properties +5 -5
  59. package/i18n/fr-CA.js +5 -5
  60. package/i18n/fr-CA.properties +5 -5
  61. package/i18n/fr-FR.js +5 -5
  62. package/i18n/fr-FR.properties +5 -5
  63. package/i18n/hi-IN.js +5 -5
  64. package/i18n/hi-IN.properties +5 -5
  65. package/i18n/it-IT.js +5 -5
  66. package/i18n/it-IT.properties +5 -5
  67. package/i18n/ko-KR.js +5 -5
  68. package/i18n/ko-KR.properties +5 -5
  69. package/i18n/nb-NO.js +5 -5
  70. package/i18n/nb-NO.properties +5 -5
  71. package/i18n/nl-NL.js +5 -5
  72. package/i18n/nl-NL.properties +5 -5
  73. package/i18n/pl-PL.js +5 -5
  74. package/i18n/pl-PL.properties +5 -5
  75. package/i18n/pt-BR.js +5 -5
  76. package/i18n/pt-BR.properties +5 -5
  77. package/i18n/ru-RU.js +6 -6
  78. package/i18n/ru-RU.properties +6 -6
  79. package/i18n/sv-SE.js +5 -5
  80. package/i18n/sv-SE.properties +5 -5
  81. package/i18n/tr-TR.js +6 -6
  82. package/i18n/tr-TR.properties +6 -6
  83. package/i18n/zh-CN.js +5 -5
  84. package/i18n/zh-CN.properties +5 -5
  85. package/i18n/zh-TW.js +5 -5
  86. package/i18n/zh-TW.properties +5 -5
  87. package/package.json +3 -3
  88. package/src/constants.js +5 -0
  89. package/src/elements/content-explorer/ContentExplorer.tsx +2 -0
  90. package/src/elements/content-explorer/MetadataQueryAPIHelper.ts +3 -9
  91. package/src/elements/content-explorer/MetadataQueryBuilder.ts +14 -26
  92. package/src/elements/content-explorer/__tests__/MetadataQueryAPIHelper.test.ts +41 -14
  93. package/src/elements/content-explorer/__tests__/MetadataQueryBuilder.test.ts +13 -0
  94. package/src/elements/content-explorer/constants.ts +0 -2
  95. package/src/elements/content-explorer/utils.ts +5 -14
  96. package/src/elements/content-open-with/ContentOpenWith.js +2 -0
  97. package/src/elements/content-picker/ContentPicker.js +2 -0
  98. package/src/elements/content-preview/ContentPreview.js +2 -0
  99. package/src/elements/content-sharing/ContentSharing.js +2 -1
  100. package/src/elements/content-sidebar/ContentSidebar.js +7 -1
  101. package/src/elements/content-uploader/ContentUploader.tsx +2 -0
  102. package/src/elements/wrappers/ES6Wrapper.js +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataQueryAPIHelper.js","names":["cloneDeep","find","getProp","includes","isArray","areFieldValuesEqual","isEmptyValue","isMultiValuesField","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","METADATA_FIELD_TYPE_ENUM","METADATA_FIELD_TYPE_MULTISELECT","FIELD_ITEM_NAME","FIELD_METADATA","FIELD_EXTENSION","FIELD_PERMISSIONS","getMimeTypeFilter","getRangeFilter","getSelectFilter","getStringFilter","mergeQueries","mergeQueryParams","SELECT_TYPES","MetadataQueryAPIHelper","constructor","api","_defineProperty","field","oldValue","newValue","operation","testOp","op","path","value","patchOp","fields","from","metadataQuery","filter","map","split","pop","metadata","templateFields","metadataTemplate","instance","templateScope","templateKey","queryFields","getMetadataQueryFields","queryField","templateField","type","displayName","key","options","enterprise","id","$id","templateSchemaResponse","entries","items","next_marker","nextMarker","metadataQueryResponseData","data","length","Promise","resolve","Object","keys","getMetadataAPI","getSchemaByTemplateKey","item","templateOldFields","templateNewFields","scope","itemFields","operations","flatMap","newField","newFieldValue","Number","oldField","f","oldFieldValue","shouldUseItemFieldValue","createJSONPatchOperations","reject","getMetadataQueryAPI","queryMetadata","forceFetch","successCallback","errorCallback","verifyQueryFields","then","getTemplateSchemaInfo","getDataWithTypes","collection","catch","file","updateMetadata","forEach","generateOperations","push","bulkUpdateMetadata","filters","argIndex","queries","queryParams","fieldType","result","keysGenerated","arrayValue","Array","v","String","query","reduce","acc","curr","index","customQuery","filterQuery","clonedQuery","clonedFields","filteredQueryParams","buildMetadataQueryParams","query_params","customQueryParams","mergeQuery"],"sources":["../../../src/elements/content-explorer/MetadataQueryAPIHelper.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport getProp from 'lodash/get';\nimport includes from 'lodash/includes';\nimport isArray from 'lodash/isArray';\nimport type { MetadataTemplateField } from '@box/metadata-editor';\nimport type { MetadataFieldType } from '@box/metadata-view';\n\nimport API from '../../api';\nimport { areFieldValuesEqual, isEmptyValue, isMultiValuesField } from './utils';\n\nimport {\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n METADATA_FIELD_TYPE_ENUM,\n METADATA_FIELD_TYPE_MULTISELECT,\n} from '../../common/constants';\nimport { FIELD_ITEM_NAME, FIELD_METADATA, FIELD_EXTENSION, FIELD_PERMISSIONS } from '../../constants';\n\nimport type { MetadataQuery as MetadataQueryType, MetadataQueryResponseData } from '../../common/types/metadataQueries';\nimport type {\n MetadataTemplateSchemaResponse,\n MetadataTemplate,\n MetadataFieldValue,\n MetadataType,\n MetadataQueryInstanceTypeField,\n} from '../../common/types/metadata';\nimport type { ElementsXhrError, JSONPatchOperations } from '../../common/types/api';\nimport type { Collection, BoxItem } from '../../common/types/core';\nimport {\n getMimeTypeFilter,\n getRangeFilter,\n getSelectFilter,\n getStringFilter,\n mergeQueries,\n mergeQueryParams,\n} from './MetadataQueryBuilder';\nimport type { ExternalFilterValues } from './MetadataViewContainer';\n\ntype SuccessCallback = (metadataQueryCollection: Collection, metadataTemplate: MetadataTemplate) => void;\ntype ErrorCallback = (e: ElementsXhrError) => void;\n\nconst SELECT_TYPES: Array<typeof METADATA_FIELD_TYPE_ENUM | typeof METADATA_FIELD_TYPE_MULTISELECT> = [\n METADATA_FIELD_TYPE_ENUM,\n METADATA_FIELD_TYPE_MULTISELECT,\n];\n\nexport default class MetadataQueryAPIHelper {\n api: API;\n\n metadataQueryResponseData: MetadataQueryResponseData;\n\n metadataTemplate: MetadataTemplate;\n\n templateKey: string;\n\n templateScope: string;\n\n metadataQuery: MetadataQueryType;\n\n constructor(api: API) {\n this.api = api;\n }\n\n createJSONPatchOperations = (\n field: string,\n oldValue: MetadataFieldValue | null,\n newValue: MetadataFieldValue | null,\n ): JSONPatchOperations => {\n // check if two values are the same, return empty operations if so\n if (areFieldValuesEqual(oldValue, newValue)) {\n return [];\n }\n\n let operation = JSON_PATCH_OP_REPLACE;\n\n if (isEmptyValue(oldValue) && !isEmptyValue(newValue)) {\n operation = JSON_PATCH_OP_ADD;\n }\n\n if (!isEmptyValue(oldValue) && isEmptyValue(newValue)) {\n operation = JSON_PATCH_OP_REMOVE;\n }\n\n const testOp = {\n op: JSON_PATCH_OP_TEST,\n path: `/${field}`,\n value: oldValue,\n };\n const patchOp = {\n op: operation,\n path: `/${field}`,\n value: newValue,\n };\n\n if (operation === JSON_PATCH_OP_REMOVE) {\n delete patchOp.value;\n }\n\n return operation === JSON_PATCH_OP_ADD ? [patchOp] : [testOp, patchOp];\n };\n\n getMetadataQueryFields = (): string[] => {\n /*\n Example metadata query:\n const query = {\n from: 'enterprise_12345.myAwesomeTemplateKey',\n fields: [\n 'name', // base representation field for an item (name, size, etag etc.)\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_1', // metadata instance field\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_2', // metadata instance field\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_3' // metadata instance field\n ],\n ancestor_folder_id: 0,\n };\n\n This function will return ['field_1', 'field_2', 'field_3']\n */\n const { fields = [], from } = this.metadataQuery;\n return fields.filter(field => field.includes(from)).map(field => field.split('.').pop());\n };\n\n flattenMetadata = (metadata?: MetadataType): MetadataType => {\n const templateFields = getProp(this.metadataTemplate, 'fields', []);\n const instance = getProp(metadata, `${this.templateScope}.${this.templateKey}`);\n\n if (!instance) {\n return {};\n }\n\n const queryFields = this.getMetadataQueryFields();\n\n const fields = queryFields.map((queryField: string) => {\n const templateField = find(templateFields, ['key', queryField]);\n const type = getProp(templateField, 'type'); // get data type\n const displayName = getProp(templateField, 'displayName', queryField); // get displayName, defaults to key\n\n const field: MetadataQueryInstanceTypeField = {\n key: `${FIELD_METADATA}.${this.templateScope}.${this.templateKey}.${queryField}`,\n value: instance[queryField],\n type,\n displayName,\n };\n\n if (includes(SELECT_TYPES, type)) {\n // get \"options\" for enums or multiselects\n field.options = getProp(templateField, 'options');\n }\n\n return field;\n });\n\n return {\n enterprise: {\n fields,\n id: instance.$id,\n },\n };\n };\n\n getDataWithTypes = (templateSchemaResponse?: MetadataTemplateSchemaResponse): Collection => {\n this.metadataTemplate = getProp(templateSchemaResponse, 'data');\n\n const { entries: items, next_marker: nextMarker }: MetadataQueryResponseData = this.metadataQueryResponseData;\n\n return {\n items,\n nextMarker,\n };\n };\n\n getTemplateSchemaInfo = (data: MetadataQueryResponseData): Promise<MetadataTemplateSchemaResponse | void> => {\n const { entries } = data;\n this.metadataQueryResponseData = data;\n if (!entries || entries.length === 0) {\n // Don't make metadata API call to get template info\n return Promise.resolve();\n }\n\n const metadata = getProp(entries, '[0].metadata');\n this.templateScope = Object.keys(metadata)[0];\n const instance = metadata[this.templateScope];\n this.templateKey = Object.keys(instance)[0];\n\n return this.api.getMetadataAPI(true).getSchemaByTemplateKey(this.templateKey);\n };\n\n /**\n * Generate operations for all fields update in the metadata sidepanel\n *\n * @private\n * @return {JSONPatchOperations}\n */\n generateOperations = (\n item: BoxItem,\n templateOldFields: MetadataTemplateField[],\n templateNewFields: MetadataTemplateField[],\n ): JSONPatchOperations => {\n const { scope, templateKey } = this.metadataTemplate;\n const itemFields = item.metadata[scope][templateKey];\n const operations = templateNewFields.flatMap(newField => {\n let newFieldValue = newField.value;\n const { key, type } = newField;\n // when retrieve value from float type field, it gives a string instead\n if (type === 'float' && newFieldValue !== '') {\n newFieldValue = Number(newFieldValue);\n }\n const oldField = templateOldFields.find(f => f.key === key);\n const oldFieldValue = oldField.value;\n\n /*\n Generate operations array based on all the fields' orignal value and the incoming updated value.\n\n Edge Case:\n If there are multiple items shared different value for enum or multi-select field, the form will\n return 'Multiple values' as the value. In this case, it needs to generate operation based on the\n actual item's field value.\n */\n const shouldUseItemFieldValue =\n isMultiValuesField(type as MetadataFieldType, oldFieldValue) &&\n !isMultiValuesField(type as MetadataFieldType, newFieldValue);\n\n return this.createJSONPatchOperations(\n key,\n shouldUseItemFieldValue ? itemFields[key] : oldFieldValue,\n newFieldValue,\n );\n });\n\n return operations;\n };\n\n queryMetadata = (): Promise<MetadataQueryResponseData> => {\n return new Promise((resolve, reject) => {\n this.api.getMetadataQueryAPI().queryMetadata(this.metadataQuery, resolve, reject, { forceFetch: true });\n });\n };\n\n fetchMetadataQueryResults = (\n metadataQuery: MetadataQueryType,\n successCallback: SuccessCallback,\n errorCallback: ErrorCallback,\n fields?: ExternalFilterValues,\n ): Promise<void> => {\n this.metadataQuery = this.verifyQueryFields(metadataQuery, fields);\n\n return this.queryMetadata()\n .then(this.getTemplateSchemaInfo)\n .then(this.getDataWithTypes)\n .then((collection: Collection) => {\n return successCallback(collection, this.metadataTemplate);\n })\n .catch(errorCallback);\n };\n\n updateMetadata = (\n file: BoxItem,\n field: string,\n oldValue: MetadataFieldValue | null,\n newValue: MetadataFieldValue | null,\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n const operations = this.createJSONPatchOperations(field, oldValue, newValue);\n return this.api\n .getMetadataAPI(true)\n .updateMetadata(file, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n updateMetadataWithOperations = (\n item: BoxItem,\n operations: JSONPatchOperations,\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n return this.api\n .getMetadataAPI(true)\n .updateMetadata(item, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n bulkUpdateMetadata = (\n items: BoxItem[],\n templateOldFields: MetadataTemplateField[],\n templateNewFields: MetadataTemplateField[],\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n const operations: JSONPatchOperations = [];\n items.forEach(item => {\n const operation = this.generateOperations(item, templateOldFields, templateNewFields);\n operations.push(operation);\n });\n return this.api\n .getMetadataAPI(true)\n .bulkUpdateMetadata(items, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n buildMetadataQueryParams = (filters: ExternalFilterValues) => {\n let argIndex = 0;\n let queries: string[] = [];\n let queryParams: { [key: string]: number | Date | string } = {};\n\n if (filters) {\n Object.keys(filters).forEach(key => {\n const filter = filters[key];\n if (!filter) {\n return;\n }\n\n const { fieldType, value } = filter;\n\n switch (fieldType) {\n case 'date':\n case 'float': {\n if (typeof value === 'object' && value !== null && 'range' in value) {\n const result = getRangeFilter(value, key, argIndex);\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n break;\n }\n break;\n }\n case 'enum':\n case 'multiSelect': {\n const arrayValue = Array.isArray(value) ? value.map(v => String(v)) : [String(value)];\n let result;\n if (key === 'mimetype-filter') {\n result = getMimeTypeFilter(arrayValue, key, argIndex);\n } else {\n result = getSelectFilter(arrayValue, key, argIndex);\n }\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n break;\n }\n\n case 'string': {\n if (value && value[0]) {\n const result = getStringFilter(value[0], key, argIndex);\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n }\n break;\n }\n\n default:\n break;\n }\n });\n }\n\n const query = queries.reduce((acc, curr, index) => {\n if (index > 0) {\n acc += ` AND ${curr}`;\n } else {\n acc = curr;\n }\n return acc;\n }, '');\n\n return {\n queryParams,\n query,\n };\n };\n\n mergeQuery = (customQuery: string, filterQuery: string): string => {\n if (!customQuery) {\n return filterQuery;\n }\n if (!filterQuery) {\n return customQuery;\n }\n // Merge queries with AND operator\n return `${customQuery} AND ${filterQuery}`;\n };\n\n /**\n * Verify that the metadata query has required fields and update it if necessary\n * For a file item, default fields included in the response are \"type\", \"id\", \"etag\"\n *\n * @param {MetadataQueryType} metadataQuery metadata query object\n * @param {ExternalFilterValues} [fields] optional filter values to apply to the metadata query\n * @return {MetadataQueryType} updated metadata query object with required fields\n */\n verifyQueryFields = (metadataQuery: MetadataQueryType, fields?: ExternalFilterValues): MetadataQueryType => {\n const clonedQuery = cloneDeep(metadataQuery);\n const clonedFields = isArray(clonedQuery.fields) ? clonedQuery.fields : [];\n\n if (fields) {\n const { query: filterQuery, queryParams: filteredQueryParams } = this.buildMetadataQueryParams(fields);\n const { query: customQuery, query_params: customQueryParams } = clonedQuery;\n const query = this.mergeQuery(customQuery, filterQuery);\n const queryParams = mergeQueryParams(filteredQueryParams, customQueryParams);\n if (query) {\n clonedQuery.query = query;\n clonedQuery.query_params = queryParams;\n }\n }\n // Make sure the query fields array has \"name\" field which is necessary to display info.\n if (!clonedFields.includes(FIELD_ITEM_NAME)) {\n clonedFields.push(FIELD_ITEM_NAME);\n }\n\n if (!clonedFields.includes(FIELD_EXTENSION)) {\n clonedFields.push(FIELD_EXTENSION);\n }\n\n // This field is necessary to check if the user has permission to update metadata\n if (!clonedFields.includes(FIELD_PERMISSIONS)) {\n clonedFields.push(FIELD_PERMISSIONS);\n }\n\n clonedQuery.fields = clonedFields;\n\n return clonedQuery;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetadataQueryAPIHelper.js","names":["cloneDeep","find","getProp","includes","isArray","areFieldValuesEqual","isEmptyValue","isMultiValuesField","JSON_PATCH_OP_ADD","JSON_PATCH_OP_REMOVE","JSON_PATCH_OP_REPLACE","JSON_PATCH_OP_TEST","METADATA_FIELD_TYPE_ENUM","METADATA_FIELD_TYPE_MULTISELECT","FIELD_ITEM_NAME","FIELD_METADATA","FIELD_EXTENSION","FIELD_PERMISSIONS","getMimeTypeFilter","getRangeFilter","getSelectFilter","getStringFilter","mergeQueries","mergeQueryParams","SELECT_TYPES","MetadataQueryAPIHelper","constructor","api","_defineProperty","field","oldValue","newValue","operation","testOp","op","path","value","patchOp","fields","from","metadataQuery","filter","map","split","pop","metadata","templateFields","metadataTemplate","instance","templateScope","templateKey","queryFields","getMetadataQueryFields","queryField","templateField","type","displayName","key","options","enterprise","id","$id","templateSchemaResponse","entries","items","next_marker","nextMarker","metadataQueryResponseData","data","scope","getMetadataAPI","getSchemaByTemplateKey","item","templateOldFields","templateNewFields","itemFields","operations","flatMap","newField","newFieldValue","Number","oldField","f","oldFieldValue","shouldUseItemFieldValue","createJSONPatchOperations","Promise","resolve","reject","getMetadataQueryAPI","queryMetadata","forceFetch","successCallback","errorCallback","verifyQueryFields","then","getTemplateSchemaInfo","getDataWithTypes","collection","catch","file","updateMetadata","forEach","generateOperations","push","bulkUpdateMetadata","filters","argIndex","queries","queryParams","Object","keys","fieldType","result","keysGenerated","arrayValue","Array","v","String","query","reduce","acc","curr","index","customQuery","filterQuery","clonedQuery","clonedFields","filteredQueryParams","buildMetadataQueryParams","query_params","customQueryParams","mergeQuery"],"sources":["../../../src/elements/content-explorer/MetadataQueryAPIHelper.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport getProp from 'lodash/get';\nimport includes from 'lodash/includes';\nimport isArray from 'lodash/isArray';\nimport type { MetadataTemplateField } from '@box/metadata-editor';\nimport type { MetadataFieldType } from '@box/metadata-view';\n\nimport API from '../../api';\nimport { areFieldValuesEqual, isEmptyValue, isMultiValuesField } from './utils';\n\nimport {\n JSON_PATCH_OP_ADD,\n JSON_PATCH_OP_REMOVE,\n JSON_PATCH_OP_REPLACE,\n JSON_PATCH_OP_TEST,\n METADATA_FIELD_TYPE_ENUM,\n METADATA_FIELD_TYPE_MULTISELECT,\n} from '../../common/constants';\nimport { FIELD_ITEM_NAME, FIELD_METADATA, FIELD_EXTENSION, FIELD_PERMISSIONS } from '../../constants';\n\nimport type { MetadataQuery as MetadataQueryType, MetadataQueryResponseData } from '../../common/types/metadataQueries';\nimport type {\n MetadataTemplateSchemaResponse,\n MetadataTemplate,\n MetadataFieldValue,\n MetadataType,\n MetadataQueryInstanceTypeField,\n} from '../../common/types/metadata';\nimport type { ElementsXhrError, JSONPatchOperations } from '../../common/types/api';\nimport type { Collection, BoxItem } from '../../common/types/core';\nimport {\n getMimeTypeFilter,\n getRangeFilter,\n getSelectFilter,\n getStringFilter,\n mergeQueries,\n mergeQueryParams,\n} from './MetadataQueryBuilder';\nimport type { ExternalFilterValues } from './MetadataViewContainer';\n\ntype SuccessCallback = (metadataQueryCollection: Collection, metadataTemplate: MetadataTemplate) => void;\ntype ErrorCallback = (e: ElementsXhrError) => void;\n\nconst SELECT_TYPES: Array<typeof METADATA_FIELD_TYPE_ENUM | typeof METADATA_FIELD_TYPE_MULTISELECT> = [\n METADATA_FIELD_TYPE_ENUM,\n METADATA_FIELD_TYPE_MULTISELECT,\n];\n\nexport default class MetadataQueryAPIHelper {\n api: API;\n\n metadataQueryResponseData: MetadataQueryResponseData;\n\n metadataTemplate: MetadataTemplate;\n\n templateKey: string;\n\n templateScope: string;\n\n metadataQuery: MetadataQueryType;\n\n constructor(api: API) {\n this.api = api;\n }\n\n createJSONPatchOperations = (\n field: string,\n oldValue: MetadataFieldValue | null,\n newValue: MetadataFieldValue | null,\n ): JSONPatchOperations => {\n // check if two values are the same, return empty operations if so\n if (areFieldValuesEqual(oldValue, newValue)) {\n return [];\n }\n\n let operation = JSON_PATCH_OP_REPLACE;\n\n if (isEmptyValue(oldValue) && !isEmptyValue(newValue)) {\n operation = JSON_PATCH_OP_ADD;\n }\n\n if (!isEmptyValue(oldValue) && isEmptyValue(newValue)) {\n operation = JSON_PATCH_OP_REMOVE;\n }\n\n const testOp = {\n op: JSON_PATCH_OP_TEST,\n path: `/${field}`,\n value: oldValue,\n };\n const patchOp = {\n op: operation,\n path: `/${field}`,\n value: newValue,\n };\n\n if (operation === JSON_PATCH_OP_REMOVE) {\n delete patchOp.value;\n }\n\n return operation === JSON_PATCH_OP_ADD ? [patchOp] : [testOp, patchOp];\n };\n\n getMetadataQueryFields = (): string[] => {\n /*\n Example metadata query:\n const query = {\n from: 'enterprise_12345.myAwesomeTemplateKey',\n fields: [\n 'name', // base representation field for an item (name, size, etag etc.)\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_1', // metadata instance field\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_2', // metadata instance field\n 'metadata.enterprise_12345.myAwesomeTemplateKey.field_3' // metadata instance field\n ],\n ancestor_folder_id: 0,\n };\n\n This function will return ['field_1', 'field_2', 'field_3']\n */\n const { fields = [], from } = this.metadataQuery;\n return fields.filter(field => field.includes(from)).map(field => field.split('.').pop());\n };\n\n flattenMetadata = (metadata?: MetadataType): MetadataType => {\n const templateFields = getProp(this.metadataTemplate, 'fields', []);\n const instance = getProp(metadata, `${this.templateScope}.${this.templateKey}`);\n\n if (!instance) {\n return {};\n }\n\n const queryFields = this.getMetadataQueryFields();\n\n const fields = queryFields.map((queryField: string) => {\n const templateField = find(templateFields, ['key', queryField]);\n const type = getProp(templateField, 'type'); // get data type\n const displayName = getProp(templateField, 'displayName', queryField); // get displayName, defaults to key\n\n const field: MetadataQueryInstanceTypeField = {\n key: `${FIELD_METADATA}.${this.templateScope}.${this.templateKey}.${queryField}`,\n value: instance[queryField],\n type,\n displayName,\n };\n\n if (includes(SELECT_TYPES, type)) {\n // get \"options\" for enums or multiselects\n field.options = getProp(templateField, 'options');\n }\n\n return field;\n });\n\n return {\n enterprise: {\n fields,\n id: instance.$id,\n },\n };\n };\n\n getDataWithTypes = (templateSchemaResponse?: MetadataTemplateSchemaResponse): Collection => {\n this.metadataTemplate = getProp(templateSchemaResponse, 'data');\n\n const { entries: items, next_marker: nextMarker }: MetadataQueryResponseData = this.metadataQueryResponseData;\n\n return {\n items,\n nextMarker,\n };\n };\n\n getTemplateSchemaInfo = (data: MetadataQueryResponseData): Promise<MetadataTemplateSchemaResponse | void> => {\n this.metadataQueryResponseData = data;\n\n const [scope, key] = this.metadataQuery.from.split('.');\n this.templateScope = scope;\n this.templateKey = key;\n\n return this.api.getMetadataAPI(true).getSchemaByTemplateKey(this.templateKey);\n };\n\n /**\n * Generate operations for all fields update in the metadata sidepanel\n *\n * @private\n * @return {JSONPatchOperations}\n */\n generateOperations = (\n item: BoxItem,\n templateOldFields: MetadataTemplateField[],\n templateNewFields: MetadataTemplateField[],\n ): JSONPatchOperations => {\n const { scope, templateKey } = this.metadataTemplate;\n const itemFields = item.metadata[scope][templateKey];\n const operations = templateNewFields.flatMap(newField => {\n let newFieldValue = newField.value;\n const { key, type } = newField;\n // when retrieve value from float type field, it gives a string instead\n if (type === 'float' && newFieldValue !== '') {\n newFieldValue = Number(newFieldValue);\n }\n const oldField = templateOldFields.find(f => f.key === key);\n const oldFieldValue = oldField.value;\n\n /*\n Generate operations array based on all the fields' orignal value and the incoming updated value.\n\n Edge Case:\n If there are multiple items shared different value for enum or multi-select field, the form will\n return 'Multiple values' as the value. In this case, it needs to generate operation based on the\n actual item's field value.\n */\n const shouldUseItemFieldValue =\n isMultiValuesField(type as MetadataFieldType, oldFieldValue) &&\n !isMultiValuesField(type as MetadataFieldType, newFieldValue);\n\n return this.createJSONPatchOperations(\n key,\n shouldUseItemFieldValue ? itemFields[key] : oldFieldValue,\n newFieldValue,\n );\n });\n\n return operations;\n };\n\n queryMetadata = (): Promise<MetadataQueryResponseData> => {\n return new Promise((resolve, reject) => {\n this.api.getMetadataQueryAPI().queryMetadata(this.metadataQuery, resolve, reject, { forceFetch: true });\n });\n };\n\n fetchMetadataQueryResults = (\n metadataQuery: MetadataQueryType,\n successCallback: SuccessCallback,\n errorCallback: ErrorCallback,\n fields?: ExternalFilterValues,\n ): Promise<void> => {\n this.metadataQuery = this.verifyQueryFields(metadataQuery, fields);\n\n return this.queryMetadata()\n .then(this.getTemplateSchemaInfo)\n .then(this.getDataWithTypes)\n .then((collection: Collection) => {\n return successCallback(collection, this.metadataTemplate);\n })\n .catch(errorCallback);\n };\n\n updateMetadata = (\n file: BoxItem,\n field: string,\n oldValue: MetadataFieldValue | null,\n newValue: MetadataFieldValue | null,\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n const operations = this.createJSONPatchOperations(field, oldValue, newValue);\n return this.api\n .getMetadataAPI(true)\n .updateMetadata(file, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n updateMetadataWithOperations = (\n item: BoxItem,\n operations: JSONPatchOperations,\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n return this.api\n .getMetadataAPI(true)\n .updateMetadata(item, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n bulkUpdateMetadata = (\n items: BoxItem[],\n templateOldFields: MetadataTemplateField[],\n templateNewFields: MetadataTemplateField[],\n successCallback: () => void,\n errorCallback: ErrorCallback,\n ): Promise<void> => {\n const operations: JSONPatchOperations = [];\n items.forEach(item => {\n const operation = this.generateOperations(item, templateOldFields, templateNewFields);\n operations.push(operation);\n });\n return this.api\n .getMetadataAPI(true)\n .bulkUpdateMetadata(items, this.metadataTemplate, operations, successCallback, errorCallback);\n };\n\n buildMetadataQueryParams = (filters: ExternalFilterValues) => {\n let argIndex = 0;\n let queries: string[] = [];\n let queryParams: { [key: string]: number | Date | string } = {};\n\n if (filters) {\n Object.keys(filters).forEach(key => {\n const filter = filters[key];\n if (!filter) {\n return;\n }\n\n const { fieldType, value } = filter;\n\n switch (fieldType) {\n case 'date':\n case 'float': {\n if (typeof value === 'object' && value !== null && 'range' in value) {\n const result = getRangeFilter(value, key, argIndex);\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n break;\n }\n break;\n }\n case 'enum':\n case 'multiSelect': {\n const arrayValue = Array.isArray(value) ? value.map(v => String(v)) : [String(value)];\n let result;\n if (key === 'mimetype-filter') {\n result = getMimeTypeFilter(arrayValue, key, argIndex);\n } else {\n result = getSelectFilter(arrayValue, key, argIndex);\n }\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n break;\n }\n\n case 'string': {\n if (value && value[0]) {\n const result = getStringFilter(value[0], key, argIndex);\n queryParams = mergeQueryParams(queryParams, result.queryParams);\n queries = mergeQueries(queries, result.queries);\n argIndex += result.keysGenerated;\n }\n break;\n }\n\n default:\n break;\n }\n });\n }\n\n const query = queries.reduce((acc, curr, index) => {\n if (index > 0) {\n acc += ` AND ${curr}`;\n } else {\n acc = curr;\n }\n return acc;\n }, '');\n\n return {\n queryParams,\n query,\n };\n };\n\n mergeQuery = (customQuery: string, filterQuery: string): string => {\n if (!customQuery) {\n return filterQuery;\n }\n if (!filterQuery) {\n return customQuery;\n }\n // Merge queries with AND operator\n return `${customQuery} AND ${filterQuery}`;\n };\n\n /**\n * Verify that the metadata query has required fields and update it if necessary\n * For a file item, default fields included in the response are \"type\", \"id\", \"etag\"\n *\n * @param {MetadataQueryType} metadataQuery metadata query object\n * @param {ExternalFilterValues} [fields] optional filter values to apply to the metadata query\n * @return {MetadataQueryType} updated metadata query object with required fields\n */\n verifyQueryFields = (metadataQuery: MetadataQueryType, fields?: ExternalFilterValues): MetadataQueryType => {\n const clonedQuery = cloneDeep(metadataQuery);\n const clonedFields = isArray(clonedQuery.fields) ? clonedQuery.fields : [];\n\n if (fields) {\n const { query: filterQuery, queryParams: filteredQueryParams } = this.buildMetadataQueryParams(fields);\n const { query: customQuery, query_params: customQueryParams } = clonedQuery;\n const query = this.mergeQuery(customQuery, filterQuery);\n const queryParams = mergeQueryParams(filteredQueryParams, customQueryParams);\n if (query) {\n clonedQuery.query = query;\n clonedQuery.query_params = queryParams;\n }\n }\n // Make sure the query fields array has \"name\" field which is necessary to display info.\n if (!clonedFields.includes(FIELD_ITEM_NAME)) {\n clonedFields.push(FIELD_ITEM_NAME);\n }\n\n if (!clonedFields.includes(FIELD_EXTENSION)) {\n clonedFields.push(FIELD_EXTENSION);\n }\n\n // This field is necessary to check if the user has permission to update metadata\n if (!clonedFields.includes(FIELD_PERMISSIONS)) {\n clonedFields.push(FIELD_PERMISSIONS);\n }\n\n clonedQuery.fields = clonedFields;\n\n return clonedQuery;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
5
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
7
  import isNil from 'lodash/isNil';
8
- import { mapFileTypes } from './utils';
8
+ import { getFileExtensions } from './utils';
9
9
 
10
10
  // Custom type for range filters
11
11
 
@@ -102,16 +102,6 @@ export const getMimeTypeFilter = (filterValue, fieldKey, argIndexStart) => {
102
102
  keysGenerated: 0
103
103
  };
104
104
  }
105
-
106
- // Use mapFileTypes to get the correct extensions and handle special cases
107
- const mappedExtensions = mapFileTypes(filterValue);
108
- if (mappedExtensions.length === 0) {
109
- return {
110
- queryParams: {},
111
- queries: [],
112
- keysGenerated: 0
113
- };
114
- }
115
105
  let currentArgIndex = argIndexStart;
116
106
  const queryParams = {};
117
107
  const queries = [];
@@ -119,23 +109,23 @@ export const getMimeTypeFilter = (filterValue, fieldKey, argIndexStart) => {
119
109
  // Handle specific extensions and folder type
120
110
  const extensions = [];
121
111
  let hasFolder = false;
122
- for (const extension of mappedExtensions) {
123
- if (extension === 'folder') {
124
- if (!hasFolder) {
125
- currentArgIndex += 1;
126
- const folderArgKey = generateArgKey('mime_folderType', currentArgIndex);
127
- queryParams[folderArgKey] = 'folder';
128
- queries.push(`(item.type = :${folderArgKey})`);
129
- hasFolder = true;
130
- }
112
+ for (const extension of filterValue) {
113
+ if (extension === 'folderType' && !hasFolder) {
114
+ currentArgIndex += 1;
115
+ const folderArgKey = generateArgKey('mime_folderType', currentArgIndex);
116
+ queryParams[folderArgKey] = 'folder';
117
+ queries.push(`(item.type = :${folderArgKey})`);
118
+ hasFolder = true;
131
119
  } else {
132
- extensions.push(extension);
120
+ extensions.push(getFileExtensions(extension));
133
121
  }
134
122
  }
135
123
 
124
+ // flat the array of arrays
125
+ const flattenExtensions = extensions.flat();
136
126
  // Handle extensions in batch if any exist
137
- if (extensions.length > 0) {
138
- const extensionQueryParams = Object.fromEntries(extensions.map(extension => {
127
+ if (flattenExtensions.length > 0) {
128
+ const extensionQueryParams = Object.fromEntries(flattenExtensions.map(extension => {
139
129
  currentArgIndex += 1;
140
130
  return [generateArgKey(fieldKey, currentArgIndex), extension];
141
131
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataQueryBuilder.js","names":["isNil","mapFileTypes","mergeQueryParams","targetParams","sourceParams","_objectSpread","mergeQueries","targetQueries","sourceQueries","generateArgKey","key","index","purifyKey","replace","escapeValue","value","getStringFilter","filterValue","fieldKey","argIndexStart","currentArgIndex","argKey","queryParams","queries","keysGenerated","isInvalid","getRangeFilter","range","gt","lt","argKeyGt","argKeyLt","push","getSelectFilter","Array","isArray","length","multiSelectQueryParams","Object","fromEntries","map","String","keys","join","getMimeTypeFilter","mappedExtensions","extensions","hasFolder","extension","folderArgKey","extensionQueryParams","_extends","finalQueries"],"sources":["../../../src/elements/content-explorer/MetadataQueryBuilder.ts"],"sourcesContent":["import { BoxItemSelection } from '@box/box-item-type-selector';\nimport isNil from 'lodash/isNil';\nimport { mapFileTypes } from './utils';\n\ntype QueryResult = {\n queryParams: { [key: string]: number | Date | string };\n queries: string[];\n keysGenerated: number;\n};\n\n// Custom type for range filters\ntype SimpleRangeType = {\n range: {\n gt: number | string;\n lt: number | string;\n };\n};\n\n// Union type for filter values\ntype SimpleFilterValue = string[] | SimpleRangeType;\n\nexport const mergeQueryParams = (\n targetParams: { [key: string]: number | Date | string },\n sourceParams: { [key: string]: number | Date | string },\n): { [key: string]: number | Date | string } => {\n return { ...targetParams, ...sourceParams };\n};\n\nexport const mergeQueries = (targetQueries: string[], sourceQueries: string[]): string[] => {\n return [...targetQueries, ...sourceQueries];\n};\n\nconst generateArgKey = (key: string, index: number): string => {\n const purifyKey = key.replace(/[^\\w]/g, '_');\n return `arg_${purifyKey}_${index}`;\n};\n\nconst escapeValue = (value: string): string => value.replace(/([_%])/g, '\\\\$1');\n\nexport const getStringFilter = (filterValue: string, fieldKey: string, argIndexStart: number): QueryResult => {\n let currentArgIndex = argIndexStart;\n\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n return {\n queryParams: { [argKey]: `%${escapeValue(filterValue)}%` },\n queries: [`(${fieldKey} ILIKE :${argKey})`],\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n\nconst isInvalid = (value: number | string) => {\n return isNil(value) || value === '';\n};\n\nexport const getRangeFilter = (\n filterValue: SimpleFilterValue,\n fieldKey: string,\n argIndexStart: number,\n): QueryResult => {\n let currentArgIndex = argIndexStart;\n\n if (filterValue && typeof filterValue === 'object' && 'range' in filterValue && filterValue.range) {\n const { gt, lt } = filterValue.range;\n const queryParams: { [key: string]: number | string } = {};\n const queries: string[] = [];\n\n if (!isInvalid(gt) && !isInvalid(lt)) {\n // Both gt and lt: between values\n const argKeyGt = generateArgKey(fieldKey, (currentArgIndex += 1));\n const argKeyLt = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKeyGt] = gt;\n queryParams[argKeyLt] = lt;\n queries.push(`(${fieldKey} >= :${argKeyGt} AND ${fieldKey} <= :${argKeyLt})`);\n } else if (!isInvalid(gt)) {\n // Only gt: greater than\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKey] = gt;\n queries.push(`(${fieldKey} >= :${argKey})`);\n } else if (!isInvalid(lt)) {\n // Only lt: less than\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKey] = lt;\n queries.push(`(${fieldKey} <= :${argKey})`);\n }\n\n return {\n queryParams,\n queries,\n keysGenerated: currentArgIndex - argIndexStart,\n };\n }\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n};\n\nexport const getSelectFilter = (filterValue: string[], fieldKey: string, argIndexStart: number): QueryResult => {\n if (!Array.isArray(filterValue) || filterValue.length === 0) {\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n }\n\n let currentArgIndex = argIndexStart;\n\n const multiSelectQueryParams = Object.fromEntries(\n filterValue.map(value => {\n currentArgIndex += 1;\n return [generateArgKey(fieldKey, currentArgIndex), String(value)];\n }),\n );\n\n return {\n queryParams: multiSelectQueryParams,\n queries: [\n `(${fieldKey} HASANY (${Object.keys(multiSelectQueryParams)\n .map(argKey => `:${argKey}`)\n .join(', ')}))`,\n ],\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n\nexport const getMimeTypeFilter = (filterValue: string[], fieldKey: string, argIndexStart: number): QueryResult => {\n if (!Array.isArray(filterValue) || filterValue.length === 0) {\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n }\n\n // Use mapFileTypes to get the correct extensions and handle special cases\n const mappedExtensions = mapFileTypes(filterValue as BoxItemSelection);\n if (mappedExtensions.length === 0) {\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n }\n\n let currentArgIndex = argIndexStart;\n const queryParams: { [key: string]: number | Date | string } = {};\n const queries: string[] = [];\n\n // Handle specific extensions and folder type\n const extensions: string[] = [];\n let hasFolder = false;\n\n for (const extension of mappedExtensions) {\n if (extension === 'folder') {\n if (!hasFolder) {\n currentArgIndex += 1;\n const folderArgKey = generateArgKey('mime_folderType', currentArgIndex);\n queryParams[folderArgKey] = 'folder';\n queries.push(`(item.type = :${folderArgKey})`);\n hasFolder = true;\n }\n } else {\n extensions.push(extension);\n }\n }\n\n // Handle extensions in batch if any exist\n if (extensions.length > 0) {\n const extensionQueryParams = Object.fromEntries(\n extensions.map(extension => {\n currentArgIndex += 1;\n return [generateArgKey(fieldKey, currentArgIndex), extension];\n }),\n );\n\n Object.assign(queryParams, extensionQueryParams);\n queries.push(\n `(item.extension IN (${Object.keys(extensionQueryParams)\n .map(argKey => `:${argKey}`)\n .join(', ')}))`,\n );\n }\n\n // Combine queries with OR if multiple exist\n const finalQueries = queries.length > 1 ? [`(${queries.join(' OR ')})`] : queries;\n\n return {\n queryParams,\n queries: finalQueries,\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetadataQueryBuilder.js","names":["isNil","getFileExtensions","mergeQueryParams","targetParams","sourceParams","_objectSpread","mergeQueries","targetQueries","sourceQueries","generateArgKey","key","index","purifyKey","replace","escapeValue","value","getStringFilter","filterValue","fieldKey","argIndexStart","currentArgIndex","argKey","queryParams","queries","keysGenerated","isInvalid","getRangeFilter","range","gt","lt","argKeyGt","argKeyLt","push","getSelectFilter","Array","isArray","length","multiSelectQueryParams","Object","fromEntries","map","String","keys","join","getMimeTypeFilter","extensions","hasFolder","extension","folderArgKey","flattenExtensions","flat","extensionQueryParams","_extends","finalQueries"],"sources":["../../../src/elements/content-explorer/MetadataQueryBuilder.ts"],"sourcesContent":["import isNil from 'lodash/isNil';\nimport { getFileExtensions } from './utils';\n\ntype QueryResult = {\n queryParams: { [key: string]: number | Date | string };\n queries: string[];\n keysGenerated: number;\n};\n\n// Custom type for range filters\ntype SimpleRangeType = {\n range: {\n gt: number | string;\n lt: number | string;\n };\n};\n\n// Union type for filter values\ntype SimpleFilterValue = string[] | SimpleRangeType;\n\nexport const mergeQueryParams = (\n targetParams: { [key: string]: number | Date | string },\n sourceParams: { [key: string]: number | Date | string },\n): { [key: string]: number | Date | string } => {\n return { ...targetParams, ...sourceParams };\n};\n\nexport const mergeQueries = (targetQueries: string[], sourceQueries: string[]): string[] => {\n return [...targetQueries, ...sourceQueries];\n};\n\nconst generateArgKey = (key: string, index: number): string => {\n const purifyKey = key.replace(/[^\\w]/g, '_');\n return `arg_${purifyKey}_${index}`;\n};\n\nconst escapeValue = (value: string): string => value.replace(/([_%])/g, '\\\\$1');\n\nexport const getStringFilter = (filterValue: string, fieldKey: string, argIndexStart: number): QueryResult => {\n let currentArgIndex = argIndexStart;\n\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n return {\n queryParams: { [argKey]: `%${escapeValue(filterValue)}%` },\n queries: [`(${fieldKey} ILIKE :${argKey})`],\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n\nconst isInvalid = (value: number | string) => {\n return isNil(value) || value === '';\n};\n\nexport const getRangeFilter = (\n filterValue: SimpleFilterValue,\n fieldKey: string,\n argIndexStart: number,\n): QueryResult => {\n let currentArgIndex = argIndexStart;\n\n if (filterValue && typeof filterValue === 'object' && 'range' in filterValue && filterValue.range) {\n const { gt, lt } = filterValue.range;\n const queryParams: { [key: string]: number | string } = {};\n const queries: string[] = [];\n\n if (!isInvalid(gt) && !isInvalid(lt)) {\n // Both gt and lt: between values\n const argKeyGt = generateArgKey(fieldKey, (currentArgIndex += 1));\n const argKeyLt = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKeyGt] = gt;\n queryParams[argKeyLt] = lt;\n queries.push(`(${fieldKey} >= :${argKeyGt} AND ${fieldKey} <= :${argKeyLt})`);\n } else if (!isInvalid(gt)) {\n // Only gt: greater than\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKey] = gt;\n queries.push(`(${fieldKey} >= :${argKey})`);\n } else if (!isInvalid(lt)) {\n // Only lt: less than\n const argKey = generateArgKey(fieldKey, (currentArgIndex += 1));\n queryParams[argKey] = lt;\n queries.push(`(${fieldKey} <= :${argKey})`);\n }\n\n return {\n queryParams,\n queries,\n keysGenerated: currentArgIndex - argIndexStart,\n };\n }\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n};\n\nexport const getSelectFilter = (filterValue: string[], fieldKey: string, argIndexStart: number): QueryResult => {\n if (!Array.isArray(filterValue) || filterValue.length === 0) {\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n }\n\n let currentArgIndex = argIndexStart;\n\n const multiSelectQueryParams = Object.fromEntries(\n filterValue.map(value => {\n currentArgIndex += 1;\n return [generateArgKey(fieldKey, currentArgIndex), String(value)];\n }),\n );\n\n return {\n queryParams: multiSelectQueryParams,\n queries: [\n `(${fieldKey} HASANY (${Object.keys(multiSelectQueryParams)\n .map(argKey => `:${argKey}`)\n .join(', ')}))`,\n ],\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n\nexport const getMimeTypeFilter = (filterValue: string[], fieldKey: string, argIndexStart: number): QueryResult => {\n if (!Array.isArray(filterValue) || filterValue.length === 0) {\n return {\n queryParams: {},\n queries: [],\n keysGenerated: 0,\n };\n }\n\n let currentArgIndex = argIndexStart;\n const queryParams: { [key: string]: number | Date | string } = {};\n const queries: string[] = [];\n\n // Handle specific extensions and folder type\n const extensions: string[][] = [];\n let hasFolder = false;\n for (const extension of filterValue) {\n if (extension === 'folderType' && !hasFolder) {\n currentArgIndex += 1;\n const folderArgKey = generateArgKey('mime_folderType', currentArgIndex);\n queryParams[folderArgKey] = 'folder';\n queries.push(`(item.type = :${folderArgKey})`);\n hasFolder = true;\n } else {\n extensions.push(getFileExtensions(extension));\n }\n }\n\n // flat the array of arrays\n const flattenExtensions = extensions.flat();\n // Handle extensions in batch if any exist\n if (flattenExtensions.length > 0) {\n const extensionQueryParams = Object.fromEntries(\n flattenExtensions.map(extension => {\n currentArgIndex += 1;\n return [generateArgKey(fieldKey, currentArgIndex), extension];\n }),\n );\n\n Object.assign(queryParams, extensionQueryParams);\n queries.push(\n `(item.extension IN (${Object.keys(extensionQueryParams)\n .map(argKey => `:${argKey}`)\n .join(', ')}))`,\n );\n }\n\n // Combine queries with OR if multiple exist\n const finalQueries = queries.length > 1 ? [`(${queries.join(' OR ')})`] : queries;\n\n return {\n queryParams,\n queries: finalQueries,\n keysGenerated: currentArgIndex - argIndexStart,\n };\n};\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,MAAM,cAAc;AAChC,SAASC,iBAAiB,QAAQ,SAAS;;AAQ3C;;AAQA;;AAGA,OAAO,MAAMC,gBAAgB,GAAGA,CAC5BC,YAAuD,EACvDC,YAAuD,KACX;EAC5C,OAAAC,aAAA,CAAAA,aAAA,KAAYF,YAAY,GAAKC,YAAY;AAC7C,CAAC;AAED,OAAO,MAAME,YAAY,GAAGA,CAACC,aAAuB,EAAEC,aAAuB,KAAe;EACxF,OAAO,CAAC,GAAGD,aAAa,EAAE,GAAGC,aAAa,CAAC;AAC/C,CAAC;AAED,MAAMC,cAAc,GAAGA,CAACC,GAAW,EAAEC,KAAa,KAAa;EAC3D,MAAMC,SAAS,GAAGF,GAAG,CAACG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;EAC5C,OAAO,OAAOD,SAAS,IAAID,KAAK,EAAE;AACtC,CAAC;AAED,MAAMG,WAAW,GAAIC,KAAa,IAAaA,KAAK,CAACF,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;AAE/E,OAAO,MAAMG,eAAe,GAAGA,CAACC,WAAmB,EAAEC,QAAgB,EAAEC,aAAqB,KAAkB;EAC1G,IAAIC,eAAe,GAAGD,aAAa;EAEnC,MAAME,MAAM,GAAGZ,cAAc,CAACS,QAAQ,EAAGE,eAAe,IAAI,CAAE,CAAC;EAC/D,OAAO;IACHE,WAAW,EAAE;MAAE,CAACD,MAAM,GAAG,IAAIP,WAAW,CAACG,WAAW,CAAC;IAAI,CAAC;IAC1DM,OAAO,EAAE,CAAC,IAAIL,QAAQ,WAAWG,MAAM,GAAG,CAAC;IAC3CG,aAAa,EAAEJ,eAAe,GAAGD;EACrC,CAAC;AACL,CAAC;AAED,MAAMM,SAAS,GAAIV,KAAsB,IAAK;EAC1C,OAAOf,KAAK,CAACe,KAAK,CAAC,IAAIA,KAAK,KAAK,EAAE;AACvC,CAAC;AAED,OAAO,MAAMW,cAAc,GAAGA,CAC1BT,WAA8B,EAC9BC,QAAgB,EAChBC,aAAqB,KACP;EACd,IAAIC,eAAe,GAAGD,aAAa;EAEnC,IAAIF,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAI,OAAO,IAAIA,WAAW,IAAIA,WAAW,CAACU,KAAK,EAAE;IAC/F,MAAM;MAAEC,EAAE;MAAEC;IAAG,CAAC,GAAGZ,WAAW,CAACU,KAAK;IACpC,MAAML,WAA+C,GAAG,CAAC,CAAC;IAC1D,MAAMC,OAAiB,GAAG,EAAE;IAE5B,IAAI,CAACE,SAAS,CAACG,EAAE,CAAC,IAAI,CAACH,SAAS,CAACI,EAAE,CAAC,EAAE;MAClC;MACA,MAAMC,QAAQ,GAAGrB,cAAc,CAACS,QAAQ,EAAGE,eAAe,IAAI,CAAE,CAAC;MACjE,MAAMW,QAAQ,GAAGtB,cAAc,CAACS,QAAQ,EAAGE,eAAe,IAAI,CAAE,CAAC;MACjEE,WAAW,CAACQ,QAAQ,CAAC,GAAGF,EAAE;MAC1BN,WAAW,CAACS,QAAQ,CAAC,GAAGF,EAAE;MAC1BN,OAAO,CAACS,IAAI,CAAC,IAAId,QAAQ,QAAQY,QAAQ,QAAQZ,QAAQ,QAAQa,QAAQ,GAAG,CAAC;IACjF,CAAC,MAAM,IAAI,CAACN,SAAS,CAACG,EAAE,CAAC,EAAE;MACvB;MACA,MAAMP,MAAM,GAAGZ,cAAc,CAACS,QAAQ,EAAGE,eAAe,IAAI,CAAE,CAAC;MAC/DE,WAAW,CAACD,MAAM,CAAC,GAAGO,EAAE;MACxBL,OAAO,CAACS,IAAI,CAAC,IAAId,QAAQ,QAAQG,MAAM,GAAG,CAAC;IAC/C,CAAC,MAAM,IAAI,CAACI,SAAS,CAACI,EAAE,CAAC,EAAE;MACvB;MACA,MAAMR,MAAM,GAAGZ,cAAc,CAACS,QAAQ,EAAGE,eAAe,IAAI,CAAE,CAAC;MAC/DE,WAAW,CAACD,MAAM,CAAC,GAAGQ,EAAE;MACxBN,OAAO,CAACS,IAAI,CAAC,IAAId,QAAQ,QAAQG,MAAM,GAAG,CAAC;IAC/C;IAEA,OAAO;MACHC,WAAW;MACXC,OAAO;MACPC,aAAa,EAAEJ,eAAe,GAAGD;IACrC,CAAC;EACL;EACA,OAAO;IACHG,WAAW,EAAE,CAAC,CAAC;IACfC,OAAO,EAAE,EAAE;IACXC,aAAa,EAAE;EACnB,CAAC;AACL,CAAC;AAED,OAAO,MAAMS,eAAe,GAAGA,CAAChB,WAAqB,EAAEC,QAAgB,EAAEC,aAAqB,KAAkB;EAC5G,IAAI,CAACe,KAAK,CAACC,OAAO,CAAClB,WAAW,CAAC,IAAIA,WAAW,CAACmB,MAAM,KAAK,CAAC,EAAE;IACzD,OAAO;MACHd,WAAW,EAAE,CAAC,CAAC;MACfC,OAAO,EAAE,EAAE;MACXC,aAAa,EAAE;IACnB,CAAC;EACL;EAEA,IAAIJ,eAAe,GAAGD,aAAa;EAEnC,MAAMkB,sBAAsB,GAAGC,MAAM,CAACC,WAAW,CAC7CtB,WAAW,CAACuB,GAAG,CAACzB,KAAK,IAAI;IACrBK,eAAe,IAAI,CAAC;IACpB,OAAO,CAACX,cAAc,CAACS,QAAQ,EAAEE,eAAe,CAAC,EAAEqB,MAAM,CAAC1B,KAAK,CAAC,CAAC;EACrE,CAAC,CACL,CAAC;EAED,OAAO;IACHO,WAAW,EAAEe,sBAAsB;IACnCd,OAAO,EAAE,CACL,IAAIL,QAAQ,YAAYoB,MAAM,CAACI,IAAI,CAACL,sBAAsB,CAAC,CACtDG,GAAG,CAACnB,MAAM,IAAI,IAAIA,MAAM,EAAE,CAAC,CAC3BsB,IAAI,CAAC,IAAI,CAAC,IAAI,CACtB;IACDnB,aAAa,EAAEJ,eAAe,GAAGD;EACrC,CAAC;AACL,CAAC;AAED,OAAO,MAAMyB,iBAAiB,GAAGA,CAAC3B,WAAqB,EAAEC,QAAgB,EAAEC,aAAqB,KAAkB;EAC9G,IAAI,CAACe,KAAK,CAACC,OAAO,CAAClB,WAAW,CAAC,IAAIA,WAAW,CAACmB,MAAM,KAAK,CAAC,EAAE;IACzD,OAAO;MACHd,WAAW,EAAE,CAAC,CAAC;MACfC,OAAO,EAAE,EAAE;MACXC,aAAa,EAAE;IACnB,CAAC;EACL;EAEA,IAAIJ,eAAe,GAAGD,aAAa;EACnC,MAAMG,WAAsD,GAAG,CAAC,CAAC;EACjE,MAAMC,OAAiB,GAAG,EAAE;;EAE5B;EACA,MAAMsB,UAAsB,GAAG,EAAE;EACjC,IAAIC,SAAS,GAAG,KAAK;EACrB,KAAK,MAAMC,SAAS,IAAI9B,WAAW,EAAE;IACjC,IAAI8B,SAAS,KAAK,YAAY,IAAI,CAACD,SAAS,EAAE;MAC1C1B,eAAe,IAAI,CAAC;MACpB,MAAM4B,YAAY,GAAGvC,cAAc,CAAC,iBAAiB,EAAEW,eAAe,CAAC;MACvEE,WAAW,CAAC0B,YAAY,CAAC,GAAG,QAAQ;MACpCzB,OAAO,CAACS,IAAI,CAAC,iBAAiBgB,YAAY,GAAG,CAAC;MAC9CF,SAAS,GAAG,IAAI;IACpB,CAAC,MAAM;MACHD,UAAU,CAACb,IAAI,CAAC/B,iBAAiB,CAAC8C,SAAS,CAAC,CAAC;IACjD;EACJ;;EAEA;EACA,MAAME,iBAAiB,GAAGJ,UAAU,CAACK,IAAI,CAAC,CAAC;EAC3C;EACA,IAAID,iBAAiB,CAACb,MAAM,GAAG,CAAC,EAAE;IAC9B,MAAMe,oBAAoB,GAAGb,MAAM,CAACC,WAAW,CAC3CU,iBAAiB,CAACT,GAAG,CAACO,SAAS,IAAI;MAC/B3B,eAAe,IAAI,CAAC;MACpB,OAAO,CAACX,cAAc,CAACS,QAAQ,EAAEE,eAAe,CAAC,EAAE2B,SAAS,CAAC;IACjE,CAAC,CACL,CAAC;IAEDK,QAAA,CAAc9B,WAAW,EAAE6B,oBAAoB,CAAC;IAChD5B,OAAO,CAACS,IAAI,CACR,uBAAuBM,MAAM,CAACI,IAAI,CAACS,oBAAoB,CAAC,CACnDX,GAAG,CAACnB,MAAM,IAAI,IAAIA,MAAM,EAAE,CAAC,CAC3BsB,IAAI,CAAC,IAAI,CAAC,IACnB,CAAC;EACL;;EAEA;EACA,MAAMU,YAAY,GAAG9B,OAAO,CAACa,MAAM,GAAG,CAAC,GAAG,CAAC,IAAIb,OAAO,CAACoB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAGpB,OAAO;EAEjF,OAAO;IACHD,WAAW;IACXC,OAAO,EAAE8B,YAAY;IACrB7B,aAAa,EAAEJ,eAAe,GAAGD;EACrC,CAAC;AACL,CAAC","ignoreList":[]}
@@ -4,6 +4,5 @@ import { FOLDER_FIELDS_TO_FETCH } from '../../utils/fields';
4
4
  // Fields needed for Content Explorer folder requests
5
5
  export const CONTENT_EXPLORER_FOLDER_FIELDS_TO_FETCH = [...FOLDER_FIELDS_TO_FETCH, FIELD_FILE_VERSION, FIELD_SHA1, FIELD_SHARED_LINK, FIELD_WATERMARK_INFO];
6
6
  export const NON_FOLDER_FILE_TYPES_MAP = new Map([['boxnoteType', ['boxnote']], ['boxcanvasType', ['boxcanvas']], ['pdfType', ['pdf']], ['documentType', ['doc', 'docx', 'gdoc', 'rtf', 'txt']], ['spreadsheetType', ['xls', 'xlsx', 'xlsm', 'csv', 'gsheet']], ['presentationType', ['ppt', 'pptx', 'odp']], ['imageType', ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tif', 'tiff']], ['audioType', ['mp3', 'm4a', 'm4p', 'wav', 'mid', 'wma']], ['videoType', ['mp4', 'mpeg', 'mpg', 'wmv', '3g2', '3gp', 'avi', 'm2v', 'm4v', 'mkv', 'mov', 'ogg', 'mts', 'qt', 'ts', 'flv', 'rm']], ['drawingType', ['dwg', 'dxf']], ['threedType', ['obj', 'fbx', 'stl', 'amf', 'iges']]]);
7
- export const FILE_FOLDER_TYPES_MAP = new Map(NON_FOLDER_FILE_TYPES_MAP).set('folderType', ['folder']);
8
7
  export const NON_FOLDER_FILE_TYPES = Array.from(NON_FOLDER_FILE_TYPES_MAP.keys());
9
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["FIELD_FILE_VERSION","FIELD_SHA1","FIELD_SHARED_LINK","FIELD_WATERMARK_INFO","FOLDER_FIELDS_TO_FETCH","CONTENT_EXPLORER_FOLDER_FIELDS_TO_FETCH","NON_FOLDER_FILE_TYPES_MAP","Map","FILE_FOLDER_TYPES_MAP","set","NON_FOLDER_FILE_TYPES","Array","from","keys"],"sources":["../../../src/elements/content-explorer/constants.ts"],"sourcesContent":["import { FIELD_FILE_VERSION, FIELD_SHA1, FIELD_SHARED_LINK, FIELD_WATERMARK_INFO } from '../../constants';\nimport { FOLDER_FIELDS_TO_FETCH } from '../../utils/fields';\n\n// Fields needed for Content Explorer folder requests\nexport const CONTENT_EXPLORER_FOLDER_FIELDS_TO_FETCH = [\n ...FOLDER_FIELDS_TO_FETCH,\n FIELD_FILE_VERSION,\n FIELD_SHA1,\n FIELD_SHARED_LINK,\n FIELD_WATERMARK_INFO,\n];\n\nexport const NON_FOLDER_FILE_TYPES_MAP = new Map([\n ['boxnoteType', ['boxnote']],\n ['boxcanvasType', ['boxcanvas']],\n ['pdfType', ['pdf']],\n ['documentType', ['doc', 'docx', 'gdoc', 'rtf', 'txt']],\n ['spreadsheetType', ['xls', 'xlsx', 'xlsm', 'csv', 'gsheet']],\n ['presentationType', ['ppt', 'pptx', 'odp']],\n ['imageType', ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tif', 'tiff']],\n ['audioType', ['mp3', 'm4a', 'm4p', 'wav', 'mid', 'wma']],\n [\n 'videoType',\n [\n 'mp4',\n 'mpeg',\n 'mpg',\n 'wmv',\n '3g2',\n '3gp',\n 'avi',\n 'm2v',\n 'm4v',\n 'mkv',\n 'mov',\n 'ogg',\n 'mts',\n 'qt',\n 'ts',\n 'flv',\n 'rm',\n ],\n ],\n ['drawingType', ['dwg', 'dxf']],\n ['threedType', ['obj', 'fbx', 'stl', 'amf', 'iges']],\n]);\n\nexport const FILE_FOLDER_TYPES_MAP = new Map(NON_FOLDER_FILE_TYPES_MAP).set('folderType', ['folder']);\n\nexport const NON_FOLDER_FILE_TYPES = Array.from(NON_FOLDER_FILE_TYPES_MAP.keys());\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,UAAU,EAAEC,iBAAiB,EAAEC,oBAAoB,QAAQ,iBAAiB;AACzG,SAASC,sBAAsB,QAAQ,oBAAoB;;AAE3D;AACA,OAAO,MAAMC,uCAAuC,GAAG,CACnD,GAAGD,sBAAsB,EACzBJ,kBAAkB,EAClBC,UAAU,EACVC,iBAAiB,EACjBC,oBAAoB,CACvB;AAED,OAAO,MAAMG,yBAAyB,GAAG,IAAIC,GAAG,CAAC,CAC7C,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,EAC5B,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,CAAC,EAChC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EACpB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EACvD,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,EAC7D,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAC5C,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAClE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EACzD,CACI,WAAW,EACX,CACI,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,CACP,CACJ,EACD,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAC/B,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CACvD,CAAC;AAEF,OAAO,MAAMC,qBAAqB,GAAG,IAAID,GAAG,CAACD,yBAAyB,CAAC,CAACG,GAAG,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC;AAErG,OAAO,MAAMC,qBAAqB,GAAGC,KAAK,CAACC,IAAI,CAACN,yBAAyB,CAACO,IAAI,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["FIELD_FILE_VERSION","FIELD_SHA1","FIELD_SHARED_LINK","FIELD_WATERMARK_INFO","FOLDER_FIELDS_TO_FETCH","CONTENT_EXPLORER_FOLDER_FIELDS_TO_FETCH","NON_FOLDER_FILE_TYPES_MAP","Map","NON_FOLDER_FILE_TYPES","Array","from","keys"],"sources":["../../../src/elements/content-explorer/constants.ts"],"sourcesContent":["import { FIELD_FILE_VERSION, FIELD_SHA1, FIELD_SHARED_LINK, FIELD_WATERMARK_INFO } from '../../constants';\nimport { FOLDER_FIELDS_TO_FETCH } from '../../utils/fields';\n\n// Fields needed for Content Explorer folder requests\nexport const CONTENT_EXPLORER_FOLDER_FIELDS_TO_FETCH = [\n ...FOLDER_FIELDS_TO_FETCH,\n FIELD_FILE_VERSION,\n FIELD_SHA1,\n FIELD_SHARED_LINK,\n FIELD_WATERMARK_INFO,\n];\n\nexport const NON_FOLDER_FILE_TYPES_MAP = new Map([\n ['boxnoteType', ['boxnote']],\n ['boxcanvasType', ['boxcanvas']],\n ['pdfType', ['pdf']],\n ['documentType', ['doc', 'docx', 'gdoc', 'rtf', 'txt']],\n ['spreadsheetType', ['xls', 'xlsx', 'xlsm', 'csv', 'gsheet']],\n ['presentationType', ['ppt', 'pptx', 'odp']],\n ['imageType', ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'tif', 'tiff']],\n ['audioType', ['mp3', 'm4a', 'm4p', 'wav', 'mid', 'wma']],\n [\n 'videoType',\n [\n 'mp4',\n 'mpeg',\n 'mpg',\n 'wmv',\n '3g2',\n '3gp',\n 'avi',\n 'm2v',\n 'm4v',\n 'mkv',\n 'mov',\n 'ogg',\n 'mts',\n 'qt',\n 'ts',\n 'flv',\n 'rm',\n ],\n ],\n ['drawingType', ['dwg', 'dxf']],\n ['threedType', ['obj', 'fbx', 'stl', 'amf', 'iges']],\n]);\n\nexport const NON_FOLDER_FILE_TYPES = Array.from(NON_FOLDER_FILE_TYPES_MAP.keys());\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,UAAU,EAAEC,iBAAiB,EAAEC,oBAAoB,QAAQ,iBAAiB;AACzG,SAASC,sBAAsB,QAAQ,oBAAoB;;AAE3D;AACA,OAAO,MAAMC,uCAAuC,GAAG,CACnD,GAAGD,sBAAsB,EACzBJ,kBAAkB,EAClBC,UAAU,EACVC,iBAAiB,EACjBC,oBAAoB,CACvB;AAED,OAAO,MAAMG,yBAAyB,GAAG,IAAIC,GAAG,CAAC,CAC7C,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,EAC5B,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,CAAC,EAChC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EACpB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EACvD,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,EAC7D,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAC5C,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAClE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EACzD,CACI,WAAW,EACX,CACI,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,CACP,CACJ,EACD,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAC/B,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CACvD,CAAC;AAEF,OAAO,MAAMC,qBAAqB,GAAGC,KAAK,CAACC,IAAI,CAACJ,yBAAyB,CAACK,IAAI,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -9,7 +9,7 @@ import isNil from 'lodash/isNil';
9
9
  import xor from 'lodash/xor';
10
10
  import { MULTI_VALUE_DEFAULT_OPTION, MULTI_VALUE_DEFAULT_VALUE } from '@box/metadata-editor';
11
11
  import messages from '../common/messages';
12
- import { FILE_FOLDER_TYPES_MAP, NON_FOLDER_FILE_TYPES } from './constants';
12
+ import { NON_FOLDER_FILE_TYPES_MAP } from './constants';
13
13
 
14
14
  // Specific type for metadata field value in the item
15
15
  // Note: Item doesn't have field value in metadata object if that field is not set, so the value will be undefined in this case
@@ -193,15 +193,10 @@ export function useTemplateInstance(metadataTemplate, selectedItems, isEditing)
193
193
  type
194
194
  };
195
195
  }
196
- export const mapFileTypes = selectedFileTypes => {
197
- const selectedFileTypesSet = new Set(selectedFileTypes);
198
- const areAllNonFolderFileTypesSelected = NON_FOLDER_FILE_TYPES.every(key => selectedFileTypesSet.has(key));
199
- if (areAllNonFolderFileTypesSelected) {
200
- if (selectedFileTypes.includes('folderType')) {
201
- return [];
202
- }
203
- return ['file'];
196
+ export const getFileExtensions = selectedFileType => {
197
+ if (NON_FOLDER_FILE_TYPES_MAP.has(selectedFileType)) {
198
+ return NON_FOLDER_FILE_TYPES_MAP.get(selectedFileType).flat();
204
199
  }
205
- return selectedFileTypes.map(fileType => FILE_FOLDER_TYPES_MAP.get(fileType) || []).flat();
200
+ return [];
206
201
  };
207
202
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["React","useMemo","useIntl","isNil","xor","MULTI_VALUE_DEFAULT_OPTION","MULTI_VALUE_DEFAULT_VALUE","messages","FILE_FOLDER_TYPES_MAP","NON_FOLDER_FILE_TYPES","useSelectedItemText","currentCollection","selectedItemIds","formatMessage","selectedCount","items","length","size","selectedKey","id","values","next","value","selectedItem","find","item","name","numFilesSelected","numSelected","isEmptyValue","Array","isArray","Number","isNaN","areFieldValuesEqual","value1","value2","getDefaultValueByFieldType","fieldType","undefined","getFieldValue","fieldValue","isMultiValuesField","useTemplateInstance","metadataTemplate","selectedItems","isEditing","displayName","fields","hidden","scope","templateKey","type","selectedItemsFields","map","fieldDisplayName","fieldHidden","fieldId","key","options","defaultItemField","firstSelectedItem","firstSelectedItemFieldValue","metadata","_objectSpread","allItemsHaveSameInitialValue","every","multiValueOption","option","push","multipleValuesText","multipleValues","createElement","Fragment","canEdit","mapFileTypes","selectedFileTypes","selectedFileTypesSet","Set","areAllNonFolderFileTypesSelected","has","includes","fileType","get","flat"],"sources":["../../../src/elements/content-explorer/utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport isNil from 'lodash/isNil';\nimport xor from 'lodash/xor';\n\nimport {\n MULTI_VALUE_DEFAULT_OPTION,\n MULTI_VALUE_DEFAULT_VALUE,\n type MetadataTemplate,\n type MetadataFormFieldValue,\n} from '@box/metadata-editor';\nimport type { MetadataFieldType } from '@box/metadata-view';\nimport type { Selection } from 'react-aria-components';\nimport { BoxItemSelection } from '@box/box-item-type-selector';\nimport type { BoxItem, Collection } from '../../common/types/core';\n\nimport messages from '../common/messages';\nimport { FILE_FOLDER_TYPES_MAP, NON_FOLDER_FILE_TYPES } from './constants';\n\n// Specific type for metadata field value in the item\n// Note: Item doesn't have field value in metadata object if that field is not set, so the value will be undefined in this case\ntype ItemMetadataFieldValue = string | number | Array<string> | null | undefined;\n\n// Get selected item text\nexport function useSelectedItemText(currentCollection: Collection, selectedItemIds: Selection): string {\n const { formatMessage } = useIntl();\n\n return useMemo(() => {\n const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;\n if (selectedCount === 0) return '';\n\n // Case 1: Single selected item - show item name\n if (selectedCount === 1) {\n const selectedKey =\n selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;\n const selectedItem = currentCollection.items.find(item => item.id === selectedKey);\n return selectedItem?.name ?? '';\n }\n\n // Case 2: Multiple selected items - show count\n return formatMessage(messages.numFilesSelected, { numSelected: selectedCount });\n }, [currentCollection.items, formatMessage, selectedItemIds]);\n}\n\n// Check if the field value is empty.\n// Note: 0 doesn't represent empty here because of float type field\nexport function isEmptyValue(value: ItemMetadataFieldValue) {\n if (isNil(value)) {\n return true;\n }\n\n // date, string, enum\n if (value === '') {\n return true;\n }\n\n // multiSelect\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n // float\n if (Number.isNaN(value)) {\n return true;\n }\n\n return false;\n}\n\n// Check if the field values are equal based on the field types\nexport function areFieldValuesEqual(value1: ItemMetadataFieldValue, value2: ItemMetadataFieldValue) {\n if (isEmptyValue(value1) && isEmptyValue(value2)) {\n return true;\n }\n\n // Handle multiSelect arrays comparison\n if (Array.isArray(value1) && Array.isArray(value2)) {\n return xor(value1, value2).length === 0;\n }\n\n return value1 === value2;\n}\n\n// Return default form value by field type\nfunction getDefaultValueByFieldType(fieldType: MetadataFieldType) {\n if (fieldType === 'date' || fieldType === 'enum' || fieldType === 'float' || fieldType === 'string') {\n return '';\n }\n if (fieldType === 'multiSelect') {\n return [];\n }\n return undefined;\n}\n\n// Set the field value in Metadata Form based on the field type\nfunction getFieldValue(fieldType: MetadataFieldType, fieldValue: ItemMetadataFieldValue) {\n if (isNil(fieldValue)) {\n return getDefaultValueByFieldType(fieldType);\n }\n return fieldValue;\n}\n\n// Check if the field value in Metadata Form is multi-values such as \"Multiple values\"\nexport function isMultiValuesField(fieldType: MetadataFieldType, fieldValue: MetadataFormFieldValue) {\n if (fieldType === 'multiSelect') {\n return Array.isArray(fieldValue) && fieldValue.length === 1 && fieldValue[0] === MULTI_VALUE_DEFAULT_VALUE;\n }\n if (fieldType === 'enum') {\n return fieldValue === MULTI_VALUE_DEFAULT_VALUE;\n }\n return false;\n}\n\n// Get template instance based on metadata template and selected items\nexport function useTemplateInstance(metadataTemplate: MetadataTemplate, selectedItems: BoxItem[], isEditing: boolean) {\n const { formatMessage } = useIntl();\n const { displayName, fields, hidden, id, scope, templateKey, type } = metadataTemplate;\n\n const selectedItemsFields = fields.map(\n ({ displayName: fieldDisplayName, hidden: fieldHidden, id: fieldId, key, options, type: fieldType }) => {\n const defaultItemField = {\n displayName: fieldDisplayName,\n hidden: fieldHidden,\n id: fieldId,\n key,\n options,\n type: fieldType,\n value: getFieldValue(fieldType as MetadataFieldType, undefined),\n };\n\n const firstSelectedItem = selectedItems[0];\n const firstSelectedItemFieldValue = firstSelectedItem.metadata[scope][templateKey][key];\n\n // Case 1: Single selected item\n if (selectedItems.length <= 1) {\n return {\n ...defaultItemField,\n value: firstSelectedItemFieldValue,\n };\n }\n\n // Case 2.1: Multiple selected items, but all have the same initial value\n const allItemsHaveSameInitialValue = selectedItems.every(selectedItem =>\n areFieldValuesEqual(selectedItem.metadata[scope][templateKey][key], firstSelectedItemFieldValue),\n );\n\n if (allItemsHaveSameInitialValue) {\n return {\n ...defaultItemField,\n value: getFieldValue(fieldType as MetadataFieldType, firstSelectedItemFieldValue),\n };\n }\n\n // Case 2.2: Multiple selected items, but some have different initial values\n // Case 2.2.1: Edit Mode\n if (isEditing) {\n let fieldValue = getFieldValue(fieldType as MetadataFieldType, undefined);\n // Add MultiValue Option if the field is multiSelect or enum\n if (fieldType === 'multiSelect' || fieldType === 'enum') {\n fieldValue = fieldType === 'enum' ? MULTI_VALUE_DEFAULT_VALUE : [MULTI_VALUE_DEFAULT_VALUE];\n const multiValueOption = options?.find(option => option.key === MULTI_VALUE_DEFAULT_VALUE);\n if (!multiValueOption) {\n options?.push(MULTI_VALUE_DEFAULT_OPTION);\n }\n }\n return {\n ...defaultItemField,\n value: fieldValue,\n };\n }\n\n /**\n * Case: 2.2.2 View Mode\n *\n * We want to show \"Multiple values\" label for multiple dates across files selection.\n * We use fragment here to bypass check in shared feature.\n * This feature tries to parse string as date if the string is passed as value.\n */\n const multipleValuesText = formatMessage(messages.multipleValues);\n return {\n ...defaultItemField,\n value: React.createElement(React.Fragment, null, multipleValuesText),\n };\n },\n );\n\n return {\n canEdit: true,\n displayName,\n hidden,\n id,\n fields: selectedItemsFields,\n scope,\n templateKey,\n type,\n };\n}\n\nexport const mapFileTypes = (selectedFileTypes: BoxItemSelection) => {\n const selectedFileTypesSet = new Set(selectedFileTypes);\n\n const areAllNonFolderFileTypesSelected = NON_FOLDER_FILE_TYPES.every(key => selectedFileTypesSet.has(key));\n\n if (areAllNonFolderFileTypesSelected) {\n if (selectedFileTypes.includes('folderType')) {\n return [];\n }\n return ['file'];\n }\n\n return selectedFileTypes.map(fileType => FILE_FOLDER_TYPES_MAP.get(fileType as string) || []).flat();\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["React","useMemo","useIntl","isNil","xor","MULTI_VALUE_DEFAULT_OPTION","MULTI_VALUE_DEFAULT_VALUE","messages","NON_FOLDER_FILE_TYPES_MAP","useSelectedItemText","currentCollection","selectedItemIds","formatMessage","selectedCount","items","length","size","selectedKey","id","values","next","value","selectedItem","find","item","name","numFilesSelected","numSelected","isEmptyValue","Array","isArray","Number","isNaN","areFieldValuesEqual","value1","value2","getDefaultValueByFieldType","fieldType","undefined","getFieldValue","fieldValue","isMultiValuesField","useTemplateInstance","metadataTemplate","selectedItems","isEditing","displayName","fields","hidden","scope","templateKey","type","selectedItemsFields","map","fieldDisplayName","fieldHidden","fieldId","key","options","defaultItemField","firstSelectedItem","firstSelectedItemFieldValue","metadata","_objectSpread","allItemsHaveSameInitialValue","every","multiValueOption","option","push","multipleValuesText","multipleValues","createElement","Fragment","canEdit","getFileExtensions","selectedFileType","has","get","flat"],"sources":["../../../src/elements/content-explorer/utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { useIntl } from 'react-intl';\nimport isNil from 'lodash/isNil';\nimport xor from 'lodash/xor';\n\nimport {\n MULTI_VALUE_DEFAULT_OPTION,\n MULTI_VALUE_DEFAULT_VALUE,\n type MetadataTemplate,\n type MetadataFormFieldValue,\n} from '@box/metadata-editor';\nimport type { MetadataFieldType } from '@box/metadata-view';\nimport type { Selection } from 'react-aria-components';\nimport type { BoxItem, Collection } from '../../common/types/core';\n\nimport messages from '../common/messages';\nimport { NON_FOLDER_FILE_TYPES_MAP } from './constants';\n\n// Specific type for metadata field value in the item\n// Note: Item doesn't have field value in metadata object if that field is not set, so the value will be undefined in this case\ntype ItemMetadataFieldValue = string | number | Array<string> | null | undefined;\n\n// Get selected item text\nexport function useSelectedItemText(currentCollection: Collection, selectedItemIds: Selection): string {\n const { formatMessage } = useIntl();\n\n return useMemo(() => {\n const selectedCount = selectedItemIds === 'all' ? currentCollection.items.length : selectedItemIds.size;\n if (selectedCount === 0) return '';\n\n // Case 1: Single selected item - show item name\n if (selectedCount === 1) {\n const selectedKey =\n selectedItemIds === 'all' ? currentCollection.items[0].id : selectedItemIds.values().next().value;\n const selectedItem = currentCollection.items.find(item => item.id === selectedKey);\n return selectedItem?.name ?? '';\n }\n\n // Case 2: Multiple selected items - show count\n return formatMessage(messages.numFilesSelected, { numSelected: selectedCount });\n }, [currentCollection.items, formatMessage, selectedItemIds]);\n}\n\n// Check if the field value is empty.\n// Note: 0 doesn't represent empty here because of float type field\nexport function isEmptyValue(value: ItemMetadataFieldValue) {\n if (isNil(value)) {\n return true;\n }\n\n // date, string, enum\n if (value === '') {\n return true;\n }\n\n // multiSelect\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n // float\n if (Number.isNaN(value)) {\n return true;\n }\n\n return false;\n}\n\n// Check if the field values are equal based on the field types\nexport function areFieldValuesEqual(value1: ItemMetadataFieldValue, value2: ItemMetadataFieldValue) {\n if (isEmptyValue(value1) && isEmptyValue(value2)) {\n return true;\n }\n\n // Handle multiSelect arrays comparison\n if (Array.isArray(value1) && Array.isArray(value2)) {\n return xor(value1, value2).length === 0;\n }\n\n return value1 === value2;\n}\n\n// Return default form value by field type\nfunction getDefaultValueByFieldType(fieldType: MetadataFieldType) {\n if (fieldType === 'date' || fieldType === 'enum' || fieldType === 'float' || fieldType === 'string') {\n return '';\n }\n if (fieldType === 'multiSelect') {\n return [];\n }\n return undefined;\n}\n\n// Set the field value in Metadata Form based on the field type\nfunction getFieldValue(fieldType: MetadataFieldType, fieldValue: ItemMetadataFieldValue) {\n if (isNil(fieldValue)) {\n return getDefaultValueByFieldType(fieldType);\n }\n return fieldValue;\n}\n\n// Check if the field value in Metadata Form is multi-values such as \"Multiple values\"\nexport function isMultiValuesField(fieldType: MetadataFieldType, fieldValue: MetadataFormFieldValue) {\n if (fieldType === 'multiSelect') {\n return Array.isArray(fieldValue) && fieldValue.length === 1 && fieldValue[0] === MULTI_VALUE_DEFAULT_VALUE;\n }\n if (fieldType === 'enum') {\n return fieldValue === MULTI_VALUE_DEFAULT_VALUE;\n }\n return false;\n}\n\n// Get template instance based on metadata template and selected items\nexport function useTemplateInstance(metadataTemplate: MetadataTemplate, selectedItems: BoxItem[], isEditing: boolean) {\n const { formatMessage } = useIntl();\n const { displayName, fields, hidden, id, scope, templateKey, type } = metadataTemplate;\n\n const selectedItemsFields = fields.map(\n ({ displayName: fieldDisplayName, hidden: fieldHidden, id: fieldId, key, options, type: fieldType }) => {\n const defaultItemField = {\n displayName: fieldDisplayName,\n hidden: fieldHidden,\n id: fieldId,\n key,\n options,\n type: fieldType,\n value: getFieldValue(fieldType as MetadataFieldType, undefined),\n };\n\n const firstSelectedItem = selectedItems[0];\n const firstSelectedItemFieldValue = firstSelectedItem.metadata[scope][templateKey][key];\n\n // Case 1: Single selected item\n if (selectedItems.length <= 1) {\n return {\n ...defaultItemField,\n value: firstSelectedItemFieldValue,\n };\n }\n\n // Case 2.1: Multiple selected items, but all have the same initial value\n const allItemsHaveSameInitialValue = selectedItems.every(selectedItem =>\n areFieldValuesEqual(selectedItem.metadata[scope][templateKey][key], firstSelectedItemFieldValue),\n );\n\n if (allItemsHaveSameInitialValue) {\n return {\n ...defaultItemField,\n value: getFieldValue(fieldType as MetadataFieldType, firstSelectedItemFieldValue),\n };\n }\n\n // Case 2.2: Multiple selected items, but some have different initial values\n // Case 2.2.1: Edit Mode\n if (isEditing) {\n let fieldValue = getFieldValue(fieldType as MetadataFieldType, undefined);\n // Add MultiValue Option if the field is multiSelect or enum\n if (fieldType === 'multiSelect' || fieldType === 'enum') {\n fieldValue = fieldType === 'enum' ? MULTI_VALUE_DEFAULT_VALUE : [MULTI_VALUE_DEFAULT_VALUE];\n const multiValueOption = options?.find(option => option.key === MULTI_VALUE_DEFAULT_VALUE);\n if (!multiValueOption) {\n options?.push(MULTI_VALUE_DEFAULT_OPTION);\n }\n }\n return {\n ...defaultItemField,\n value: fieldValue,\n };\n }\n\n /**\n * Case: 2.2.2 View Mode\n *\n * We want to show \"Multiple values\" label for multiple dates across files selection.\n * We use fragment here to bypass check in shared feature.\n * This feature tries to parse string as date if the string is passed as value.\n */\n const multipleValuesText = formatMessage(messages.multipleValues);\n return {\n ...defaultItemField,\n value: React.createElement(React.Fragment, null, multipleValuesText),\n };\n },\n );\n\n return {\n canEdit: true,\n displayName,\n hidden,\n id,\n fields: selectedItemsFields,\n scope,\n templateKey,\n type,\n };\n}\n\nexport const getFileExtensions = (selectedFileType: string) => {\n if (NON_FOLDER_FILE_TYPES_MAP.has(selectedFileType)) {\n return NON_FOLDER_FILE_TYPES_MAP.get(selectedFileType).flat();\n }\n return [];\n};\n"],"mappings":"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","ignoreList":[]}
@@ -27,7 +27,7 @@ import OpenWithFallbackButton from './OpenWithFallbackButton';
27
27
  import ExecuteForm from './ExecuteForm';
28
28
  import '../common/base.scss';
29
29
  import './ContentOpenWith.scss';
30
- import { BOX_EDIT_INTEGRATION_ID, BOX_EDIT_SFC_INTEGRATION_ID, CLIENT_NAME_OPEN_WITH, DEFAULT_HOSTNAME_API, ERROR_CODE_EXECUTE_INTEGRATION, HTTP_GET, HTTP_POST, ORIGIN_OPEN_WITH, TYPE_FILE, TYPE_FOLDER } from '../../constants';
30
+ import { BOX_EDIT_INTEGRATION_ID, BOX_EDIT_SFC_INTEGRATION_ID, CLIENT_NAME_OPEN_WITH, CLIENT_VERSION, DEFAULT_HOSTNAME_API, ERROR_CODE_EXECUTE_INTEGRATION, HTTP_GET, HTTP_POST, ORIGIN_OPEN_WITH, TYPE_FILE, TYPE_FOLDER } from '../../constants';
31
31
  const UNSUPPORTED_INVOCATION_METHOD_TYPE = 'Integration invocation using this HTTP method type is not supported';
32
32
  const BLACKLISTED_ERROR_MESSAGE_KEY = 'boxToolsBlacklistedError';
33
33
  const BOX_TOOLS_INSTALL_ERROR_MESSAGE_KEY = 'boxToolsInstallErrorMessage';
@@ -328,7 +328,8 @@ class ContentOpenWith extends PureComponent {
328
328
  language,
329
329
  requestInterceptor,
330
330
  responseInterceptor,
331
- token: _token
331
+ token: _token,
332
+ version: CLIENT_VERSION
332
333
  });
333
334
 
334
335
  // Clone initial state to allow for state reset on new files
@@ -26,6 +26,7 @@ import {
26
26
  BOX_EDIT_INTEGRATION_ID,
27
27
  BOX_EDIT_SFC_INTEGRATION_ID,
28
28
  CLIENT_NAME_OPEN_WITH,
29
+ CLIENT_VERSION,
29
30
  DEFAULT_HOSTNAME_API,
30
31
  ERROR_CODE_EXECUTE_INTEGRATION,
31
32
  HTTP_GET,
@@ -138,6 +139,7 @@ class ContentOpenWith extends PureComponent<Props, State> {
138
139
  requestInterceptor,
139
140
  responseInterceptor,
140
141
  token,
142
+ version: CLIENT_VERSION,
141
143
  });
142
144
 
143
145
  // Clone initial state to allow for state reset on new files