import { Plugin, CallExpressionShape, type Record } from '@servicenow/sdk-build-core' import { NowIdShape } from './now-id-plugin' export const UxListMenuConfigPlugin = Plugin.create({ name: 'UxListMenuConfigPlugin', records: { sys_ux_list_menu_config: { relationships: { sys_ux_list_category: { via: 'configuration', descendant: true, }, sys_ux_list: { via: 'configuration', descendant: true, }, }, toShape(record, { descendants }) { const categories = descendants.query('sys_ux_list_category').map((category) => { const lists = descendants .query('sys_ux_list') .filter((list) => { const categoryGuid = list.get('category').isString() ? list.get('category').getValue() : list.get('category').asRecord().getId().getValue() return categoryGuid === category.getId().getValue() }) .map((list) => { const applicabilities = descendants.query('sys_ux_applicability_m2m_list').filter((app) => { const listGuid = app.get('list').isString() ? app.get('list').getValue() : app.get('list').asRecord().getId().getValue() return listGuid === list.getId().getValue() }) const applicabilityShapes = applicabilities.map((app) => { return app.transform(({ $ }) => ({ $id: $.val(NowIdShape.from(app)), active: $.from('active').def(true).toBoolean(), applicability: $.from('applicability'), order: $.from('order').def(0).toNumber(), })) }) return list.transform(({ $ }) => { return { $id: $.val(NowIdShape.from(list)), active: $.from('active').def(true).toBoolean(), applicabilities: $.val(applicabilityShapes), columns: $.from('columns'), condition: $.from('condition'), enableInfiniteScroll: $.from('enable_infinite_scroll').def(false).toBoolean(), fixedQuery: $.from('fixed_query').def(''), groupByColumn: $.from('group_by_column').def(''), groups: $.from('groups').def(''), hideCellFilter: $.from('hide_cell_filter').def(false).toBoolean(), hideCheckboxHover: $.from('hide_checkbox_hover').def(false).toBoolean(), hideColumnFiltering: $.from('hide_column_filtering').def(false).toBoolean(), hideColumnGrouping: $.from('hide_column_grouping').def(false).toBoolean(), hideColumnResizing: $.from('hide_column_resizing').def(false).toBoolean(), hideColumnSorting: $.from('hide_column_sorting').def(false).toBoolean(), hideDragAndDrop: $.from('hide_drag_and_drop').def(false).toBoolean(), hideEmptyStateImage: $.from('hide_empty_state_image').def(false).toBoolean(), hideFirstPage: $.from('hide_first_page').def(false).toBoolean(), hideHeader: $.from('hide_header').def(false).toBoolean(), hideHighlightContent: $.from('hide_highlight_content').def(false).toBoolean(), hideHighlightedValues: $.from('hide_highlighted_values').def(false).toBoolean(), hideInlineEditing: $.from('hide_inline_editing').def(false).toBoolean(), hideLastPage: $.from('hide_last_page').def(false).toBoolean(), hideLastRefreshedText: $.from('hide_last_refreshed_text').def(false).toBoolean(), hideLinks: $.from('hide_links').def(false).toBoolean(), hideListActions: $.from('hide_list_actions').def(false).toBoolean(), hideMenuButton: $.from('hide_menu_button').def(false).toBoolean(), hideNextPage: $.from('hide_next_page').def(false).toBoolean(), hideOptionToSaveAs: $.from('hide_option_to_save_as').def(false).toBoolean(), hidePages: $.from('hide_pages').def(false).toBoolean(), hidePagination: $.from('hide_pagination').def(false).toBoolean(), hidePanelAdvanced: $.from('hide_panel_advanced').def(false).toBoolean(), hidePanelButton: $.from('hide_panel_button').def(false).toBoolean(), hidePanelConditionDelete: $.from('hide_panel_condition_delete') .def(false) .toBoolean(), hidePanelFooter: $.from('hide_panel_footer').def(false).toBoolean(), hidePanelRestore: $.from('hide_panel_restore').def(false).toBoolean(), hidePersonalization: $.from('hide_personalization').def(false).toBoolean(), hidePreviousPage: $.from('hide_previous_page').def(false).toBoolean(), hideQuickEdit: $.from('hide_quick_edit').def(false).toBoolean(), hideRange: $.from('hide_range').def(false).toBoolean(), hideRecordCountBadge: $.from('hide_record_count_badge').def(false).toBoolean(), hideReferenceLinks: $.from('hide_reference_links').def(false).toBoolean(), hideRefreshButton: $.from('hide_refresh_button').def(false).toBoolean(), hideRowCount: $.from('hide_row_count').def(false).toBoolean(), hideRowSelector: $.from('hide_row_selector').def(false).toBoolean(), hideRowsPerPageSelector: $.from('hide_rows_per_page_selector') .def(false) .toBoolean(), hideSelectAll: $.from('hide_select_all').def(false).toBoolean(), hideSharingButton: $.from('hide_sharing_button').def(false).toBoolean(), hideTitle: $.from('hide_title').def(false).toBoolean(), highlightContentColor: $.from('highlight_content_color').def(''), highlightContentPattern: $.from('highlight_content_pattern').def(''), listAttributes: $.from('list_attributes').def(''), liveUpdates: $.from('live_updates').def('off'), maxCharacters: $.from('max_characters').def(4000).toNumber(), order: $.from('order').def(100).toNumber(), override_word_wrap_user_pref: $.from('override_word_wrap_user_pref') .def(false) .toBoolean(), roles: $.from('roles').def(''), table: $.from('table').def(''), title: $.from('title').def(''), view: $.from('view').def(''), wordWrap: $.from('word_wrap').def(false).toBoolean(), } }) }) return category.transform(({ $ }) => { return { $id: $.val(NowIdShape.from(category)), title: $.from('title').def(''), order: $.from('order').toNumber().def(100), description: $.from('description').def(''), lists: $.val(lists), } }) }) return { success: true, value: new CallExpressionShape({ source: record, callee: 'UxListMenuConfig', args: [ record.transform(({ $ }) => { return { $id: $.val(NowIdShape.from(record)), name: $.from('name').def(''), active: $.from('active').def(true).toBoolean(), description: $.from('description').def(''), categories: $.val(categories), } }), ], }), } }, }, sys_ux_list_category: {}, sys_ux_list: { relationships: { sys_ux_applicability_m2m_list: { via: 'list', descendant: true, }, }, }, sys_ux_applicability_m2m_list: {}, }, shapes: [ { shape: CallExpressionShape, fileTypes: ['fluent'], async toRecord(callExpression, { factory }) { if (callExpression.getCallee() !== 'UxListMenuConfig') { return { success: false } } const arg = callExpression.getArgument(0).asObject() const UxListMenuConfigRecord = await factory.createRecord({ source: callExpression, table: 'sys_ux_list_menu_config', explicitId: arg.get('$id'), properties: arg.transform(({ $ }) => ({ name: $.from('name').def(''), description: $.from('description').def(''), active: $.from('active').def(true), })), }) const categories = arg.get('categories').ifArray()?.getElements() ?? [] const childRecords: Record[] = [] for (const category of categories) { const categoryObject = category.asObject() const categoryRecord = await factory.createRecord({ source: callExpression, table: 'sys_ux_list_category', explicitId: categoryObject.get('$id'), properties: categoryObject.transform(({ $ }) => ({ active: $.from('active').def(true), configuration: $.val(UxListMenuConfigRecord), description: $.from('description').def(''), title: $.from('title').def(''), order: $.from('order').def(100), })), }) childRecords.push(categoryRecord) const lists = categoryObject.get('lists').ifArray()?.getElements() ?? [] for (const list of lists) { const listObject = list.asObject() const listRecord = await factory.createRecord({ source: callExpression, table: 'sys_ux_list', explicitId: listObject.get('$id'), properties: listObject.transform(({ $ }) => ({ active: $.from('active').def(true), category: $.val(categoryRecord), columns: $.from('columns'), condition: $.from('condition'), configuration: $.val(UxListMenuConfigRecord), enable_infinite_scroll: $.from('enableInfiniteScroll').def(false), fixed_query: $.from('fixedQuery'), group_by_column: $.from('groupByColumn'), groups: $.from('groups'), hide_cell_filter: $.from('hideCellFilter').def(false), hide_checkbox_hover: $.from('hideCheckboxHover').def(false), hide_column_filtering: $.from('hideColumnFiltering').def(false), hide_column_grouping: $.from('hideColumnGrouping').def(false), hide_column_resizing: $.from('hideColumnResizing').def(false), hide_column_sorting: $.from('hideColumnSorting').def(false), hide_drag_and_drop: $.from('hideDragAndDrop').def(false), hide_empty_state_image: $.from('hideEmptyStateImage').def(false), hide_first_page: $.from('hideFirstPage').def(false), hide_header: $.from('hideHeader').def(false), hide_highlight_content: $.from('hideHighlightContent').def(false), hide_highlighted_values: $.from('hideHighlightedValues').def(false), hide_inline_editing: $.from('hideInlineEditing').def(false), hide_last_page: $.from('hideLastPage').def(false), hide_last_refreshed_text: $.from('hideLastRefreshedText').def(false), hide_links: $.from('hideLinks').def(false), hide_list_actions: $.from('hideListActions').def(false), hide_menu_button: $.from('hideMenuButton').def(false), hide_next_page: $.from('hideNextPage').def(false), hide_option_to_save_as: $.from('hideOptionToSaveAs').def(false), hide_pages: $.from('hidePages').def(false), hide_pagination: $.from('hidePagination').def(false), hide_panel_advanced: $.from('hidePanelAdvanced').def(false), hide_panel_button: $.from('hidePanelButton').def(false), hide_panel_condition_delete: $.from('hidePanelConditionDelete').def(false), hide_panel_footer: $.from('hidePanelFooter').def(false), hide_panel_restore: $.from('hidePanelRestore').def(false), hide_personalization: $.from('hidePersonalization').def(false), hide_previous_page: $.from('hidePreviousPage').def(false), hide_quick_edit: $.from('hideQuickEdit').def(false), hide_range: $.from('hideRange').def(false), hide_record_count_badge: $.from('hideRecordCountBadge').def(false), hide_reference_links: $.from('hideReferenceLinks').def(false), hide_refresh_button: $.from('hideRefreshButton').def(false), hide_row_count: $.from('hideRowCount').def(false), hide_row_selector: $.from('hideRowSelector').def(false), hide_rows_per_page_selector: $.from('hideRowsPerPageSelector').def(false), hide_select_all: $.from('hideSelectAll').def(false), hide_sharing_button: $.from('hideSharingButton').def(false), hide_title: $.from('hideTitle').def(false), highlight_content_color: $.from('highlightContentColor'), highlight_content_pattern: $.from('highlightContentPattern'), list_attributes: $.from('listAttributes'), live_updates: $.from('liveUpdates').def('off'), max_characters: $.from('maxCharacters').def(4000).toNumber(), order: $.from('order').def(100).toNumber(), override_word_wrap_user_pref: $.from('overrideWordWrapUserPref').def(false), roles: $.from('roles'), table: $.from('table'), title: $.from('title'), view: $.from('view'), word_wrap: $.from('wordWrap').def(false), })), }) childRecords.push(listRecord) // Create sys_ux_applicability_m2m_list records const applicabilities = listObject.get('applicabilities').ifArray()?.getElements() ?? [] for (const applicability of applicabilities) { const applicabilityObject = applicability.asObject() childRecords.push( await factory.createRecord({ source: callExpression, table: 'sys_ux_applicability_m2m_list', explicitId: applicabilityObject.get('$id'), properties: applicabilityObject.transform(({ $ }) => ({ active: $.from('active').def(true), applicability: $.from('applicability'), list: $.val(listRecord), order: $.from('order').def(0), })), }) ) } } } return { success: true, value: UxListMenuConfigRecord.with(...childRecords), } }, }, ], })