@api-client/ui 0.0.8 → 0.0.10

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 (57) hide show
  1. package/dist/bindings/base/StoreBindings.d.ts +1 -10
  2. package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
  3. package/dist/bindings/base/StoreBindings.js +7 -98
  4. package/dist/bindings/base/StoreBindings.js.map +1 -1
  5. package/dist/elements/authorization/ui/CcAuthorization.d.ts +5 -3
  6. package/dist/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
  7. package/dist/elements/authorization/ui/CcAuthorization.js +21 -16
  8. package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
  9. package/dist/elements/project/HttpProjectRequest.d.ts +6 -0
  10. package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
  11. package/dist/elements/project/HttpProjectRequest.js +29 -4
  12. package/dist/elements/project/HttpProjectRequest.js.map +1 -1
  13. package/dist/elements/project/HttpProjectRequestHistory.d.ts +5 -3
  14. package/dist/elements/project/HttpProjectRequestHistory.d.ts.map +1 -1
  15. package/dist/elements/project/HttpProjectRequestHistory.js +53 -42
  16. package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
  17. package/dist/elements/project/ProjectRunner.d.ts +11 -3
  18. package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
  19. package/dist/elements/project/ProjectRunner.js +60 -20
  20. package/dist/elements/project/ProjectRunner.js.map +1 -1
  21. package/dist/elements/schema-design/DataModelVisualizationElement.d.ts.map +1 -1
  22. package/dist/elements/schema-design/DataModelVisualizationElement.js +18 -1
  23. package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
  24. package/dist/events/EventTypes.d.ts +7 -23
  25. package/dist/events/EventTypes.d.ts.map +1 -1
  26. package/dist/events/EventTypes.js +7 -23
  27. package/dist/events/EventTypes.js.map +1 -1
  28. package/dist/events/Events.d.ts +0 -8
  29. package/dist/events/Events.d.ts.map +1 -1
  30. package/dist/events/StoreEvents.d.ts +1 -9
  31. package/dist/events/StoreEvents.d.ts.map +1 -1
  32. package/dist/events/StoreEvents.js +1 -21
  33. package/dist/events/StoreEvents.js.map +1 -1
  34. package/dist/events/http-client/models/CertificatesEvents.d.ts +1 -18
  35. package/dist/events/http-client/models/CertificatesEvents.d.ts.map +1 -1
  36. package/dist/events/http-client/models/CertificatesEvents.js +2 -24
  37. package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
  38. package/dist/pages/http-project/HttpProject.screen.d.ts +7 -0
  39. package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
  40. package/dist/pages/http-project/HttpProject.screen.js +11 -1
  41. package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
  42. package/dist/pages/http-project/HttpProject.styles.d.ts.map +1 -1
  43. package/dist/pages/http-project/HttpProject.styles.js +2 -1
  44. package/dist/pages/http-project/HttpProject.styles.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/bindings/base/StoreBindings.ts +7 -101
  47. package/src/elements/authorization/ui/CcAuthorization.ts +24 -19
  48. package/src/elements/project/HttpProjectRequest.ts +33 -4
  49. package/src/elements/project/HttpProjectRequestHistory.ts +58 -48
  50. package/src/elements/project/ProjectRunner.ts +69 -22
  51. package/src/elements/schema-design/DataModelVisualizationElement.ts +18 -1
  52. package/src/events/EventTypes.ts +7 -23
  53. package/src/events/StoreEvents.ts +1 -23
  54. package/src/events/http-client/models/CertificatesEvents.ts +1 -29
  55. package/src/pages/http-project/HttpProject.screen.ts +12 -1
  56. package/src/pages/http-project/HttpProject.styles.ts +2 -1
  57. package/test/events/EventTypes.test.ts +22 -60
@@ -1 +1 @@
1
- {"version":3,"file":"HttpProjectRequestHistory.js","sourceRoot":"","sources":["../../../src/elements/project/HttpProjectRequestHistory.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n ErrorResponse, IHttpHistory, IResponse, IRequestLog, \n RequestLog, IHistoryRequestListOptions, ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from \"@api-client/core/build/browser.js\";\nimport { TemplateResult, html, PropertyValues, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport ApiElement from \"../ApiElement.js\";\nimport { relativeDay } from \"../../lib/time/Conversion.js\";\nimport { HttpHistoryChart, } from '../../lib/chart/HttpHistoryChart.js';\nimport { statusTemplate, } from '../http/HttpStatus.js';\nimport { Events } from '../../events/Events.js';\nimport { EventTypes } from '../../events/EventTypes.js';\nimport SegmentedButton from \"../../ui/button/SegmentedButton.js\";\nimport UiDialog, { UiDialogClosingReason } from \"../../ui/dialog/UiDialog.js\";\nimport '@github/relative-time-element';\nimport { SnackNotifications } from \"../../ui/notification/SnackNotifications.js\";\nimport UiIconButton from \"../../ui/button/UiIconButton.js\";\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\nimport '../../define/ui/ui-dialog.js';\n\nexport enum ProjectHistoryView {\n history = 'history',\n analysis = 'analysis',\n}\n\n/**\n * An element that renders HTTP history for a configured list of requests.\n * This element is just a view and contains no logic related to store communication \n * or user interactions. Use the dispatched events to handle user interactions.\n */\nexport default class HttpProjectRequestHistory extends ApiElement {\n /**\n * The history list to render.\n */\n @state() history: IHttpHistory[] = [];\n\n /**\n * The key of the project the request belongs to.\n */\n @property({ type: String }) project?: string;\n\n /**\n * The key of the request to render the history for.\n * Both `request` and `project` properties must be set to render any view.\n */\n @property({ type: String }) request?: string;\n\n /**\n * Returns true when the element is correctly setup.\n */\n get isSetup(): boolean {\n return !!this.project && !!this.request;\n }\n\n /**\n * Whether querying for a page of results.\n */\n @state() querying = false;\n\n /**\n * A sorted list of history items by the `midnight` property.\n */\n @state() protected model?: IHttpHistory[][];\n\n /**\n * The key of the selected request, if any\n */\n @state() selectedItem?: string;\n\n /**\n * The currently rendered item.\n */\n @state() protected renderedItem?: IHttpHistory | IRequestLog | RequestLog;\n\n @state() protected view: ProjectHistoryView = ProjectHistoryView.history;\n\n protected debounceTimeout?: number;\n\n /**\n * The cursor returned by the store used in pagination.\n */\n protected pageCursor?: string;\n\n constructor() {\n super();\n\n this.handleHistoryCreated = this.handleHistoryCreated.bind(this);\n this.handleHistoryDeleted = this.handleHistoryDeleted.bind(this);\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') || cp.has('request')) {\n this.reset();\n this.queryDebounce();\n }\n if (cp.has('selectedItem')) {\n this.computeSelectedItem();\n }\n super.willUpdate(cp);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.History.State.create, this.handleHistoryCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.History.State.delete, this.handleHistoryDeleted as EventListenerOrEventListenerObject);\n }\n\n protected setupVisibility(): void {\n if (this.history && !this.history.length) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n reset(): void {\n this.history = [];\n this.pageCursor = undefined;\n this.model = undefined;\n this.selectedItem = undefined;\n this.setupVisibility();\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n queryDebounce(): void {\n if (!this.isSetup) {\n return;\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n delete this.debounceTimeout;\n this.queryPage();\n }, 1) as unknown as number;\n }\n\n protected async queryPage(): Promise<void> {\n const { project, request, pageCursor } = this;\n if (!project || !request || this.querying) {\n // todo: set `dirty` flag and re-query after finish.\n return;\n }\n this.querying = true;\n const init: IHistoryRequestListOptions = {\n type: 'request',\n project,\n id: request,\n space: '', // this is filled by the bindings\n };\n if (pageCursor) {\n init.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.History.list(init, this);\n if (!result) {\n return;\n }\n const { items, cursor } = result;\n if (items) {\n this.addItems(items);\n }\n if (cursor) {\n this.pageCursor = cursor;\n }\n } catch (e) {\n // ...\n } finally {\n this.querying = false;\n this.setupVisibility();\n }\n }\n\n addItems(items: IHttpHistory[]): void {\n const { history = [] } = this;\n this.history = history.concat(items);\n const all = history.concat(items);\n const sorted = this.sortHistory(all);\n this.model = sorted;\n this.computeSelectedItem();\n if (sorted.length && !this.renderedItem) {\n this.selectedItem = sorted[0][0].key;\n }\n this.setupVisibility();\n }\n\n /**\n * Adds a new history to the list.\n * This is used instead of re-assigning the entire array and triggering initial computations.\n * @param item The history item to add\n * @param select When true it makes this item selected,\n */\n addItem(item: IHttpHistory, select?: boolean): void {\n const { model } = this;\n this.history.push(item)\n if (!model || !model.length) {\n this.model = [[item]];\n this.selectedItem = item.key;\n this.requestUpdate();\n this.setupVisibility();\n return;\n }\n const { midnight = Date.now() } = item;\n const index = model.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(model[index], item);\n } else {\n const position = model.findIndex(i => (i[0] && i[0].midnight || 0) < midnight);\n model.splice(position, 0, [item]);\n }\n if (select && item.key) {\n this.selectedItem = item.key;\n }\n this.requestUpdate();\n this.setupVisibility();\n }\n\n protected sortHistory(history: IHttpHistory[]): IHttpHistory[][] {\n if (!Array.isArray(history) || !history.length) {\n return [];\n }\n const result: IHttpHistory[][] = [];\n const now = Date.now();\n history.forEach((current) => {\n const { midnight = now } = current;\n const index = result.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(result[index], current);\n } else if (result[0] && result[0][0] && result[0][0].midnight && result[0][0].midnight < midnight) {\n result.unshift([current])\n } else {\n result.push([current]);\n }\n });\n return result;\n }\n\n protected handleHistoryCreated(e: ContextStateUpdateEvent<IHttpHistory>): void {\n const { item, parent } = e.detail;\n if (this.request !== parent) {\n return;\n }\n if (item) {\n this.addItem(item, true);\n }\n }\n\n protected handleHistoryDeleted(e: ContextStateDeleteEvent): void {\n const { model, history } = this;\n const { key, parent } = e.detail;\n if (!model || !history || parent !== this.request) {\n return;\n }\n const historyIndex = history.findIndex(i => i.key === key);\n if (historyIndex < 0) {\n return;\n }\n history.splice(historyIndex, 1);\n for (const group of model) {\n const index = group.findIndex(i => i.key === key);\n if (index >= 0) {\n group.splice(index, 1);\n if (group.length === 0) {\n const groupIndex = model.indexOf(group);\n model.splice(groupIndex, 1);\n }\n this.requestUpdate();\n this.setupVisibility();\n break;\n }\n }\n }\n\n protected computeSelectedItem(): void {\n const { history, selectedItem } = this;\n this.renderedItem = undefined;\n if (!selectedItem || !Array.isArray(history)) {\n return;\n }\n this.renderedItem = history.find(i => i.key === selectedItem);\n }\n\n /**\n * Allows to push a history item into a right index depending on the `created` property\n * so the data processor can skip sorting each group after mutation.\n * \n * The item is inserted before an item that is older (has lower `created` property). \n * \n * @param list The list to insert the item to\n * @param item The item to insert.\n */\n protected pushSorted(list: IHttpHistory[], item: IHttpHistory): void {\n const older = list.findIndex(i => i.created < item.created);\n if (older >= 0) {\n list.splice(older, 0, item);\n } else {\n // this item is the oldest\n list.push(item);\n }\n }\n\n protected handleSelection(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement | undefined;\n if (!item) {\n return;\n }\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectedItem = key;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectHistoryView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleHistoryOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { option } = element.dataset;\n if (!option) {\n return;\n }\n if (option === 'clear') {\n this.triggerClearHistoryDialog();\n }\n }\n\n protected triggerClearHistoryDialog(): void {\n const dialog = this.shadowRoot?.querySelector('.clear-dialog') as UiDialog | null;\n if (!dialog) {\n return;\n }\n dialog.open = true;\n }\n\n protected handleClearHistoryDialogResult(e: CustomEvent<UiDialogClosingReason>): void {\n if (e.detail.cancelled) {\n return;\n }\n this.clearHistory();\n }\n\n async clearHistory(): Promise<void> {\n const { project, request } = this;\n if (!project || !request) {\n return;\n }\n // space parameter is filled by bindings.\n await Events.Store.History.clearRequest('', project, request, this);\n SnackNotifications.notify('History cleared');\n this.reset();\n }\n\n protected handleItemDelete(e: Event): void {\n const button = e.currentTarget as UiIconButton;\n const { key } = button.dataset;\n if (!key) {\n return;\n }\n this.deleteHistoryItem(key);\n }\n\n async deleteHistoryItem(key: string): Promise<void> {\n if (!key) {\n return;\n }\n const item = this.history.find(i => i.key === key);\n if (!item) {\n return;\n }\n await Events.Store.History.delete(key, this.request, this);\n SnackNotifications.notify('History item deleted', {\n actionLabel: 'Undo',\n actionCallback: () => {\n this.revertHistoryItemDelete(item);\n },\n timeout: 7000,\n });\n }\n\n async revertHistoryItemDelete(item: IHttpHistory): Promise<void> {\n const info = SnackNotifications.notify('Reverting...', { persistent: true });\n try {\n await Events.Store.History.create(item, this);\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Reverted history item.');\n } catch (e) {\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Unable to revert changes.');\n }\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { model } = this;\n if (!model || !model.length) {\n if (this.querying) {\n return this.renderLoader();\n }\n return nothing;\n }\n return html`\n ${this.renderHeader()}\n ${this.renderView()}\n ${this.renderClearHistoryDialog()}\n `;\n }\n\n protected renderLoader(): TemplateResult {\n return html`<progress></progress>`;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderHistoryDropdown()}\n ${this.renderHistoryOptions()}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderHistoryDropdown(): TemplateResult {\n const { model } = this;\n const disabled = !model || !model.length;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleSelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n History\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${this.renderHistoryList()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryOptions(): TemplateResult {\n return html`\n <ui-dropdown-list @select=\"${this.handleHistoryOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-icon-button aria-label=\"Additional options\"><ui-icon icon=\"moreVert\" role=\"presentation\"></ui-icon></ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-option=\"clear\" image=\"icon\" title=\"Deletes all history for the request\">\n <ui-icon role=\"presentation\" slot=\"start\" icon=\"deleteOutline\"></ui-icon>\n Clear history\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryList(): (TemplateResult | typeof nothing)[] | typeof nothing {\n const { model } = this;\n if (!Array.isArray(model) || !model.length) {\n return nothing;\n }\n return model.map(group => this.renderHistoryGroup(group));\n }\n\n protected renderHistoryGroup(group: IHttpHistory[]): TemplateResult | typeof nothing {\n if (!group.length) {\n // this should not happen as the model is computed internally, \n // but I prefer to do just one check to not stop execution when error.\n return nothing;\n }\n const [first] = group;\n return html`\n ${this.renderHistoryGroupTitle(first)}\n ${group.map(item => this.renderHistoryItem(item))}\n `;\n }\n\n protected renderHistoryGroupTitle(item: IHttpHistory): TemplateResult {\n const { midnight = 0 } = item;\n return html`\n <div class=\"history-group-title\">${relativeDay(midnight)}</div>\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n protected renderHistoryItem(item: IHttpHistory): TemplateResult | typeof nothing {\n const d = new Date(item.created);\n const isoTime = d.toISOString();\n\n const { log } = item;\n const { request, response } = log;\n const method = request && request.method;\n const url = request && request.url;\n if (!method || !url) {\n return nothing;\n }\n const error = !response || ErrorResponse.isErrorResponse(response);\n\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-key=\"${item.key as string}\" data-kind=\"${item.kind}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n ${this.renderHistoryItemDelete(item)}\n </div>\n <relative-time slot=\"supporting-text\" datetime=\"${isoTime}\"></relative-time>\n </ui-list-item>\n `;\n }\n\n protected renderHistoryItemDelete(item: IHttpHistory): TemplateResult | typeof nothing {\n return html`\n <ui-icon-button\n class=\"delete\"\n aria-label=\"Delete request\"\n data-key=\"${item.key as string}\" \n data-kind=\"${item.kind}\"\n @click=\"${this.handleItemDelete}\"\n ><ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderView(): TemplateResult | string {\n const { view } = this;\n if (view === ProjectHistoryView.analysis) {\n return this.renderAnalysis();\n }\n return this.renderLog();\n }\n\n protected renderLog(): TemplateResult | string {\n const { renderedItem } = this;\n if (!renderedItem) {\n return '';\n }\n const typed = renderedItem as IHttpHistory;\n const data = typed.log ? typed.log : renderedItem as IRequestLog | RequestLog;\n return html`\n <http-request-log .httpLog=\"${data}\"></http-request-log>\n `;\n }\n\n protected renderAnalysis(): TemplateResult | string {\n const { model } = this;\n if (!model) {\n return '';\n }\n const chart = new HttpHistoryChart(model);\n return chart.durationPlot();\n }\n\n protected renderViewToggle(): TemplateResult {\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button selected title=\"Shows response history\" data-value=\"history\">History</ui-segmented-button>\n <ui-segmented-button title=\"Shows history analysis\" data-value=\"analysis\">Analysis</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderClearHistoryDialog(): TemplateResult {\n return html`\n <ui-dialog modal class=\"clear-dialog\" @close=\"${this.handleClearHistoryDialogResult}\">\n <ui-icon slot=\"icon\" icon=\"deleteOutline\"></ui-icon>\n <span slot=\"title\">Delete history?</span>\n <p>This will clear responses history for this request.</p>\n <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Accept</ui-button>\n </ui-dialog>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"HttpProjectRequestHistory.js","sourceRoot":"","sources":["../../../src/elements/project/HttpProjectRequestHistory.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n ErrorResponse, IHttpHistory, IResponse, IRequestLog, \n RequestLog, IHistoryRequestListOptions, BroadcastEvent,\n HistoryCreatedBroadcastEvent,\n HistoryDeletedBroadcastEvent,\n} from \"@api-client/core/build/browser.js\";\nimport { TemplateResult, html, PropertyValues, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport ApiElement from \"../ApiElement.js\";\nimport { relativeDay } from \"../../lib/time/Conversion.js\";\nimport { HttpHistoryChart } from '../../lib/chart/HttpHistoryChart.js';\nimport { statusTemplate, } from '../http/HttpStatus.js';\nimport { Events } from '../../events/Events.js';\nimport { StoreBroadcast } from \"../../http-client/store/StoreBroadcast.js\";\nimport type SegmentedButton from \"../../ui/button/SegmentedButton.js\";\nimport UiDialog, { UiDialogClosingReason } from \"../../ui/dialog/UiDialog.js\";\nimport '@github/relative-time-element';\nimport { SnackNotifications } from \"../../ui/notification/SnackNotifications.js\";\nimport type UiIconButton from \"../../ui/button/UiIconButton.js\";\nimport '../../define/http/http-request-log.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport '../../define/ui/ui-segmented-button.js';\nimport '../../define/ui/ui-segmented-button-set.js';\nimport '../../define/ui/ui-dialog.js';\n\nexport enum ProjectHistoryView {\n history = 'history',\n analysis = 'analysis',\n}\n\n/**\n * An element that renders HTTP history for a configured list of requests.\n * This element is just a view and contains no logic related to store communication \n * or user interactions. Use the dispatched events to handle user interactions.\n */\nexport default class HttpProjectRequestHistory extends ApiElement {\n /**\n * The history list to render.\n */\n @state() history: IHttpHistory[] = [];\n\n /**\n * The key of the project the request belongs to.\n */\n @property({ type: String }) project?: string;\n\n /**\n * The key of the request to render the history for.\n * Both `request` and `project` properties must be set to render any view.\n */\n @property({ type: String }) request?: string;\n\n /**\n * Returns true when the element is correctly setup.\n */\n get isSetup(): boolean {\n return !!this.project && !!this.request;\n }\n\n /**\n * Whether querying for a page of results.\n */\n @state() querying = false;\n\n /**\n * A sorted list of history items by the `midnight` property.\n */\n @state() protected model?: IHttpHistory[][];\n\n /**\n * The key of the selected request, if any\n */\n @state() selectedItem?: string;\n\n /**\n * The currently rendered item.\n */\n @state() protected renderedItem?: IHttpHistory | IRequestLog | RequestLog;\n\n @state() protected view: ProjectHistoryView = ProjectHistoryView.history;\n\n protected debounceTimeout?: number;\n\n /**\n * The cursor returned by the store used in pagination.\n */\n protected pageCursor?: string;\n\n channel = new BroadcastChannel(StoreBroadcast.history);\n\n constructor() {\n super();\n\n this.handleBroadcast = this.handleBroadcast.bind(this);\n }\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('project') || cp.has('request')) {\n this.reset();\n this.queryDebounce();\n }\n if (cp.has('selectedItem')) {\n this.computeSelectedItem();\n }\n super.willUpdate(cp);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.channel.addEventListener('message', this.handleBroadcast);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.channel.removeEventListener('message', this.handleBroadcast);\n }\n\n protected handleBroadcast(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n switch (event.operation) {\n case 'created': this.handleHistoryCreated(event as HistoryCreatedBroadcastEvent); break;\n case 'deleted': this.handleHistoryDeleted(event as HistoryDeletedBroadcastEvent); break;\n default:\n }\n }\n\n protected handleHistoryCreated(event: HistoryCreatedBroadcastEvent): void {\n const { request, data } = event;\n const item = data as IHttpHistory;\n if (this.request !== request) {\n return;\n }\n if (item) {\n this.addItem(item, true);\n }\n }\n\n protected handleHistoryDeleted(event: HistoryDeletedBroadcastEvent): void {\n const { model, history } = this;\n const { key, request } = event;\n if (!model || !history || request !== this.request) {\n return;\n }\n const historyIndex = history.findIndex(i => i.key === key);\n if (historyIndex < 0) {\n return;\n }\n history.splice(historyIndex, 1);\n for (const group of model) {\n const index = group.findIndex(i => i.key === key);\n if (index >= 0) {\n group.splice(index, 1);\n if (group.length === 0) {\n const groupIndex = model.indexOf(group);\n model.splice(groupIndex, 1);\n }\n this.requestUpdate();\n this.setupVisibility();\n break;\n }\n }\n }\n\n protected setupVisibility(): void {\n if (this.history && !this.history.length) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n reset(): void {\n this.history = [];\n this.pageCursor = undefined;\n this.model = undefined;\n this.selectedItem = undefined;\n this.setupVisibility();\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n queryDebounce(): void {\n if (!this.isSetup) {\n return;\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n delete this.debounceTimeout;\n this.queryPage();\n }, 1) as unknown as number;\n }\n\n protected async queryPage(): Promise<void> {\n const { project, request, pageCursor } = this;\n if (!project || !request || this.querying) {\n // todo: set `dirty` flag and re-query after finish.\n return;\n }\n this.querying = true;\n const init: IHistoryRequestListOptions = {\n type: 'request',\n project,\n id: request,\n space: '', // this is filled by the bindings\n };\n if (pageCursor) {\n init.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.History.list(init, this);\n if (!result) {\n return;\n }\n const { items, cursor } = result;\n if (items) {\n this.addItems(items);\n }\n if (cursor) {\n this.pageCursor = cursor;\n }\n } catch (e) {\n // ...\n } finally {\n this.querying = false;\n this.setupVisibility();\n }\n }\n\n addItems(items: IHttpHistory[]): void {\n const { history = [] } = this;\n this.history = history.concat(items);\n const all = history.concat(items);\n const sorted = this.sortHistory(all);\n this.model = sorted;\n this.computeSelectedItem();\n if (sorted.length && !this.renderedItem) {\n this.selectedItem = sorted[0][0].key;\n }\n this.setupVisibility();\n }\n\n /**\n * Adds a new history to the list.\n * This is used instead of re-assigning the entire array and triggering initial computations.\n * @param item The history item to add\n * @param select When true it makes this item selected,\n */\n addItem(item: IHttpHistory, select?: boolean): void {\n const { model } = this;\n this.history.push(item)\n if (!model || !model.length) {\n this.model = [[item]];\n this.selectedItem = item.key;\n this.requestUpdate();\n this.setupVisibility();\n return;\n }\n const { midnight = Date.now() } = item;\n const index = model.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(model[index], item);\n } else {\n const position = model.findIndex(i => (i[0] && i[0].midnight || 0) < midnight);\n model.splice(position, 0, [item]);\n }\n if (select && item.key) {\n this.selectedItem = item.key;\n }\n this.requestUpdate();\n this.setupVisibility();\n }\n\n protected sortHistory(history: IHttpHistory[]): IHttpHistory[][] {\n if (!Array.isArray(history) || !history.length) {\n return [];\n }\n const result: IHttpHistory[][] = [];\n const now = Date.now();\n history.forEach((current) => {\n const { midnight = now } = current;\n const index = result.findIndex(i => i[0].midnight === midnight);\n if (index >= 0) {\n this.pushSorted(result[index], current);\n } else if (result[0] && result[0][0] && result[0][0].midnight && result[0][0].midnight < midnight) {\n result.unshift([current])\n } else {\n result.push([current]);\n }\n });\n return result;\n }\n\n protected computeSelectedItem(): void {\n const { history, selectedItem } = this;\n this.renderedItem = undefined;\n if (!selectedItem || !Array.isArray(history)) {\n return;\n }\n this.renderedItem = history.find(i => i.key === selectedItem);\n }\n\n /**\n * Allows to push a history item into a right index depending on the `created` property\n * so the data processor can skip sorting each group after mutation.\n * \n * The item is inserted before an item that is older (has lower `created` property). \n * \n * @param list The list to insert the item to\n * @param item The item to insert.\n */\n protected pushSorted(list: IHttpHistory[], item: IHttpHistory): void {\n const older = list.findIndex(i => i.created < item.created);\n if (older >= 0) {\n list.splice(older, 0, item);\n } else {\n // this item is the oldest\n list.push(item);\n }\n }\n\n protected handleSelection(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement | undefined;\n if (!item) {\n return;\n }\n const { key } = item.dataset;\n if (!key) {\n return;\n }\n this.selectedItem = key;\n }\n\n protected handleViewSelection(e: CustomEvent): void {\n if (!e.detail.selected) {\n return;\n }\n const button = e.detail.button as SegmentedButton;\n const view = button.dataset.value as ProjectHistoryView | undefined;\n if (view) {\n this.view = view;\n }\n }\n\n protected handleHistoryOption(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { option } = element.dataset;\n if (!option) {\n return;\n }\n if (option === 'clear') {\n this.triggerClearHistoryDialog();\n }\n }\n\n protected triggerClearHistoryDialog(): void {\n const dialog = this.shadowRoot?.querySelector('.clear-dialog') as UiDialog | null;\n if (!dialog) {\n return;\n }\n dialog.open = true;\n }\n\n protected handleClearHistoryDialogResult(e: CustomEvent<UiDialogClosingReason>): void {\n if (e.detail.cancelled) {\n return;\n }\n this.clearHistory();\n }\n\n async clearHistory(): Promise<void> {\n const { project, request } = this;\n if (!project || !request) {\n return;\n }\n // space parameter is filled by bindings.\n await Events.Store.History.clearRequest('', project, request, this);\n SnackNotifications.notify('History cleared');\n this.reset();\n }\n\n protected handleItemDelete(e: Event): void {\n const button = e.currentTarget as UiIconButton;\n const { key } = button.dataset;\n if (!key) {\n return;\n }\n this.deleteHistoryItem(key);\n }\n\n async deleteHistoryItem(key: string): Promise<void> {\n if (!key) {\n return;\n }\n const item = this.history.find(i => i.key === key);\n if (!item) {\n return;\n }\n await Events.Store.History.delete(key, this.request, this);\n SnackNotifications.notify('History item deleted', {\n actionLabel: 'Undo',\n actionCallback: () => {\n this.revertHistoryItemDelete(item);\n },\n timeout: 7000,\n });\n }\n\n async revertHistoryItemDelete(item: IHttpHistory): Promise<void> {\n const info = SnackNotifications.notify('Reverting...', { persistent: true });\n try {\n await Events.Store.History.create(item, this);\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Reverted history item.');\n } catch (e) {\n SnackNotifications.cancel(info);\n SnackNotifications.notify('Unable to revert changes.');\n }\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { model } = this;\n if (!model || !model.length) {\n if (this.querying) {\n return this.renderLoader();\n }\n return nothing;\n }\n return html`\n ${this.renderHeader()}\n ${this.renderView()}\n ${this.renderClearHistoryDialog()}\n `;\n }\n\n protected renderLoader(): TemplateResult {\n return html`<progress></progress>`;\n }\n\n protected renderHeader(): TemplateResult {\n return html`\n <div class=\"header\">\n ${this.renderHistoryDropdown()}\n ${this.renderHistoryOptions()}\n ${this.renderViewToggle()}\n </div>\n `;\n }\n\n protected renderHistoryDropdown(): TemplateResult {\n const { model } = this;\n const disabled = !model || !model.length;\n return html`\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleSelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n History\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${this.renderHistoryList()}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryOptions(): TemplateResult {\n return html`\n <ui-dropdown-list @select=\"${this.handleHistoryOption}\" closeOnOutsideClick class=\"dropdown\">\n <ui-icon-button aria-label=\"Additional options\"><ui-icon icon=\"moreVert\" role=\"presentation\"></ui-icon></ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item role=\"menuitem\" data-option=\"clear\" image=\"icon\" title=\"Deletes all history for the request\">\n <ui-icon role=\"presentation\" slot=\"start\" icon=\"deleteOutline\"></ui-icon>\n Clear history\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderHistoryList(): (TemplateResult | typeof nothing)[] | typeof nothing {\n const { model } = this;\n if (!Array.isArray(model) || !model.length) {\n return nothing;\n }\n return model.map(group => this.renderHistoryGroup(group));\n }\n\n protected renderHistoryGroup(group: IHttpHistory[]): TemplateResult | typeof nothing {\n if (!group.length) {\n // this should not happen as the model is computed internally, \n // but I prefer to do just one check to not stop execution when error.\n return nothing;\n }\n const [first] = group;\n return html`\n ${this.renderHistoryGroupTitle(first)}\n ${group.map(item => this.renderHistoryItem(item))}\n `;\n }\n\n protected renderHistoryGroupTitle(item: IHttpHistory): TemplateResult {\n const { midnight = 0 } = item;\n return html`\n <div class=\"history-group-title\">${relativeDay(midnight)}</div>\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n protected renderHistoryItem(item: IHttpHistory): TemplateResult | typeof nothing {\n const d = new Date(item.created);\n const isoTime = d.toISOString();\n\n const { log } = item;\n const { request, response } = log;\n const method = request && request.method;\n const url = request && request.url;\n if (!method || !url) {\n return nothing;\n }\n const error = !response || ErrorResponse.isErrorResponse(response);\n\n let status = 0;\n let statusText: string | undefined;\n let duration = 0;\n if (!error) {\n const typed = response as IResponse;\n status = typed.status;\n statusText = typed.statusText;\n duration = typed.loadingTime;\n }\n return html`\n <ui-list-item lines=\"two\" role=\"menuitem\" data-key=\"${item.key as string}\" data-kind=\"${item.kind}\">\n <div class=\"history-label\">\n <span class=\"label-value\">${statusTemplate(status, statusText)} ${duration} ms</span>\n ${this.renderHistoryItemDelete(item)}\n </div>\n <relative-time slot=\"supporting-text\" datetime=\"${isoTime}\"></relative-time>\n </ui-list-item>\n `;\n }\n\n protected renderHistoryItemDelete(item: IHttpHistory): TemplateResult | typeof nothing {\n return html`\n <ui-icon-button\n class=\"delete\"\n aria-label=\"Delete request\"\n data-key=\"${item.key as string}\" \n data-kind=\"${item.kind}\"\n @click=\"${this.handleItemDelete}\"\n ><ui-icon icon=\"deleteOutline\" role=\"presentation\"></ui-icon></ui-icon-button>\n `;\n }\n\n protected renderView(): TemplateResult | string {\n const { view } = this;\n if (view === ProjectHistoryView.analysis) {\n return this.renderAnalysis();\n }\n return this.renderLog();\n }\n\n protected renderLog(): TemplateResult | string {\n const { renderedItem } = this;\n if (!renderedItem) {\n return '';\n }\n const typed = renderedItem as IHttpHistory;\n const data = typed.log ? typed.log : renderedItem as IRequestLog | RequestLog;\n return html`\n <http-request-log .httpLog=\"${data}\"></http-request-log>\n `;\n }\n\n protected renderAnalysis(): TemplateResult | string {\n const { model } = this;\n if (!model) {\n return '';\n }\n const chart = new HttpHistoryChart(model);\n return chart.durationPlot();\n }\n\n protected renderViewToggle(): TemplateResult {\n return html`\n <div class=\"view-toggle\">\n <ui-segmented-button-set @select=\"${this.handleViewSelection}\">\n <ui-segmented-button selected title=\"Shows response history\" data-value=\"history\">History</ui-segmented-button>\n <ui-segmented-button title=\"Shows history analysis\" data-value=\"analysis\">Analysis</ui-segmented-button>\n </ui-segmented-button-set>\n </div>\n `;\n }\n\n protected renderClearHistoryDialog(): TemplateResult {\n return html`\n <ui-dialog modal class=\"clear-dialog\" @close=\"${this.handleClearHistoryDialogResult}\">\n <ui-icon slot=\"icon\" icon=\"deleteOutline\"></ui-icon>\n <span slot=\"title\">Delete history?</span>\n <p>This will clear responses history for this request.</p>\n <ui-button slot=\"button\" value=\"dismiss\" type=\"text\">Cancel</ui-button>\n <ui-button slot=\"button\" value=\"confirm\" type=\"text\">Accept</ui-button>\n </ui-dialog>\n `;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { TemplateResult, PropertyValues, nothing } from 'lit';
2
- import { HttpProject, ProjectFolder, IProjectRunnerOptions, IProjectExecutionLog, IApplication, IProjectExecution, ContextStateUpdateEvent, ContextStateDeleteEvent } from '@api-client/core/build/browser.js';
2
+ import { HttpProject, ProjectFolder, IProjectRunnerOptions, IProjectExecutionLog, IApplication, IProjectExecution, ProjectExecutionDeleteBroadcastEvent, ProjectExecutionCreatedBroadcastEvent } from '@api-client/core/build/browser.js';
3
3
  import ApiElement from '../ApiElement.js';
4
4
  import '@github/relative-time-element';
5
5
  import '../../define/http-project/project-run-report.js';
@@ -15,6 +15,11 @@ import '../../define/ui/ui-list-item.js';
15
15
  * @fires change - When the configuration of the runner change.
16
16
  */
17
17
  export default class ProjectRunner extends ApiElement {
18
+ /**
19
+ * A reference to the global shared variables.
20
+ * Used with the communication with the execution server.
21
+ */
22
+ sharedVariables?: Record<string, string>;
18
23
  /**
19
24
  * The instance of the current project.
20
25
  */
@@ -62,18 +67,21 @@ export default class ProjectRunner extends ApiElement {
62
67
  * The currently rendered report.
63
68
  */
64
69
  renderedReport?: IProjectExecution;
70
+ channel: BroadcastChannel;
65
71
  constructor();
66
72
  connectedCallback(): void;
67
73
  disconnectedCallback(): void;
68
74
  willUpdate(cp: PropertyValues<this>): void;
75
+ protected handleBroadcast(e: MessageEvent): void;
69
76
  protected setupRoot(): void;
70
- protected handleProjectRunCreated(e: ContextStateUpdateEvent<IProjectExecution>): void;
71
- protected handleProjectRunDeleted(e: ContextStateDeleteEvent): void;
77
+ protected handleProjectRunCreated(event: ProjectExecutionCreatedBroadcastEvent): void;
78
+ protected handleProjectRunDeleted(event: ProjectExecutionDeleteBroadcastEvent): void;
72
79
  protected handleRun(): void;
73
80
  /**
74
81
  * Executes the current configuration.
75
82
  */
76
83
  execute(): Promise<void>;
84
+ mergeExecutedVariables(result: IProjectExecutionLog): void;
77
85
  protected createHistory(result: IProjectExecutionLog): Promise<void>;
78
86
  resetHistory(): void;
79
87
  queryPageDebounce(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunner.d.ts","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectRunner.d.ts","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ import { classMap } from 'lit/directives/class-map.js';
5
5
  import { Events as CoreEvents, HttpProjectKind, ProjectExecutionKind, } from '@api-client/core/build/browser.js';
6
6
  import ApiElement from '../ApiElement.js';
7
7
  import { Events } from '../../events/Events.js';
8
- import { EventTypes } from '../../events/EventTypes.js';
9
8
  import '@github/relative-time-element';
10
9
  import '../../define/http-project/project-run-report.js';
11
10
  import '../../define/ui/ui-checkbox.js';
@@ -16,6 +15,7 @@ import '../../define/ui/ui-icon.js';
16
15
  import '../../define/ui/ui-dropdown-list.js';
17
16
  import '../../define/ui/ui-list.js';
18
17
  import '../../define/ui/ui-list-item.js';
18
+ import { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';
19
19
  /**
20
20
  * @fires change - When the configuration of the runner change.
21
21
  */
@@ -24,18 +24,16 @@ export default class ProjectRunner extends ApiElement {
24
24
  super();
25
25
  this.history = [];
26
26
  this.debounceTimeout = 100;
27
- this.handleProjectRunCreated = this.handleProjectRunCreated.bind(this);
28
- this.handleProjectRunDeleted = this.handleProjectRunDeleted.bind(this);
27
+ this.channel = new BroadcastChannel(StoreBroadcast.projectRuns);
28
+ this.handleBroadcast = this.handleBroadcast.bind(this);
29
29
  }
30
30
  connectedCallback() {
31
31
  super.connectedCallback();
32
- window.addEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated);
33
- window.addEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted);
32
+ this.channel.addEventListener('message', this.handleBroadcast);
34
33
  }
35
34
  disconnectedCallback() {
36
35
  super.disconnectedCallback();
37
- window.removeEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated);
38
- window.removeEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted);
36
+ this.channel.removeEventListener('message', this.handleBroadcast);
39
37
  }
40
38
  willUpdate(cp) {
41
39
  super.willUpdate(cp);
@@ -43,6 +41,18 @@ export default class ProjectRunner extends ApiElement {
43
41
  this.setupRoot();
44
42
  }
45
43
  }
44
+ handleBroadcast(e) {
45
+ const event = e.data;
46
+ switch (event.operation) {
47
+ case 'created':
48
+ this.handleProjectRunCreated(event);
49
+ break;
50
+ case 'deleted':
51
+ this.handleProjectRunDeleted(event);
52
+ break;
53
+ default:
54
+ }
55
+ }
46
56
  setupRoot() {
47
57
  const { project, folder } = this;
48
58
  if (!project) {
@@ -58,26 +68,31 @@ export default class ProjectRunner extends ApiElement {
58
68
  this.resetHistory();
59
69
  this.queryPageDebounce();
60
70
  }
61
- handleProjectRunCreated(e) {
62
- const { parent } = e.detail;
63
- const item = e.detail.item;
64
- const { folder } = this;
65
- // parent is either folder (if the log has a folder) or the project.
66
- if (folder) {
67
- if (parent !== folder || !item.parent || item.parent !== folder) {
68
- return;
69
- }
71
+ handleProjectRunCreated(event) {
72
+ const { project, folder } = this;
73
+ if (!project) {
74
+ return;
75
+ }
76
+ if (project.key !== event.project) {
77
+ return;
70
78
  }
71
- else if (parent !== this.project?.key) {
79
+ const item = event.data;
80
+ if (folder && item.parent !== folder) {
72
81
  return;
73
82
  }
74
83
  this.history.push(item);
75
84
  this.history.sort(this.historySort);
76
85
  this.selectHistory(item.key);
77
86
  }
78
- handleProjectRunDeleted(e) {
79
- const { history } = this;
80
- const { key } = e.detail;
87
+ handleProjectRunDeleted(event) {
88
+ const { history, project } = this;
89
+ if (!project) {
90
+ return;
91
+ }
92
+ if (project.key !== event.project) {
93
+ return;
94
+ }
95
+ const { key } = event;
81
96
  const index = history.findIndex(i => i.key === key);
82
97
  if (index < 0) {
83
98
  return;
@@ -107,6 +122,12 @@ export default class ProjectRunner extends ApiElement {
107
122
  if (folder) {
108
123
  config.parent = folder;
109
124
  }
125
+ // Note, we intentionally don't add shared variables.
126
+ // Project / folder execution should be contained and can only leak
127
+ // out the variables to the rest of the app, not in.
128
+ // if (sharedVariables && !config.variables) {
129
+ // config.variables = sharedVariables;
130
+ // }
110
131
  const init = {
111
132
  kind: HttpProjectKind,
112
133
  project: project.toJSON(),
@@ -119,6 +140,7 @@ export default class ProjectRunner extends ApiElement {
119
140
  this.lastError = 'The project execution event was not handled.';
120
141
  }
121
142
  else {
143
+ this.mergeExecutedVariables(result.result);
122
144
  this.createHistory(result.result);
123
145
  }
124
146
  }
@@ -127,6 +149,21 @@ export default class ProjectRunner extends ApiElement {
127
149
  }
128
150
  this.running = false;
129
151
  }
152
+ mergeExecutedVariables(result) {
153
+ const { sharedVariables } = this;
154
+ if (!sharedVariables) {
155
+ return;
156
+ }
157
+ result.iterations.forEach((iteration) => {
158
+ const { variables } = iteration;
159
+ if (!variables) {
160
+ return;
161
+ }
162
+ Object.keys(variables).forEach((key) => {
163
+ sharedVariables[key] = variables[key];
164
+ });
165
+ });
166
+ }
130
167
  async createHistory(result) {
131
168
  const { appInfo, project } = this;
132
169
  if (!appInfo) {
@@ -456,6 +493,9 @@ export default class ProjectRunner extends ApiElement {
456
493
  `;
457
494
  }
458
495
  }
496
+ __decorate([
497
+ property({ type: Object })
498
+ ], ProjectRunner.prototype, "sharedVariables", void 0);
459
499
  __decorate([
460
500
  property({ type: Object })
461
501
  ], ProjectRunner.prototype, "project", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n HttpProject, ProjectFolder, IProjectRunnerOptions, \n Events as CoreEvents, IProjectExecutionLog, \n IApplication, HttpProjectKind, \n IHttpProjectProxyInit,\n ProjectExecutionKind,\n IProjectExecution,\n IProjectExecutionListOptions,\n ContextStateUpdateEvent,\n ContextStateDeleteEvent,\n} from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport type CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport type Input from '../../ui/input/Input.js';\nimport { Events } from '../../events/Events.js';\nimport { EventTypes } from '../../events/EventTypes.js';\nimport '@github/relative-time-element';\nimport '../../define/http-project/project-run-report.js';\nimport '../../define/ui/ui-checkbox.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\n\n/**\n * @fires change - When the configuration of the runner change.\n */\nexport default class ProjectRunner extends ApiElement {\n /**\n * The instance of the current project.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * The key of the folder to render the runner for.\n * When not set, it renders the runner for the project.\n * @attribute\n */\n @property({ type: String, reflect: true }) folder?: string;\n\n /**\n * The object we operate on.\n */\n @state() protected root?: HttpProject | ProjectFolder;\n\n /**\n * Whether the element is currently running the project execution.\n */\n @state() protected running?: boolean;\n\n /**\n * Whether the element is currently querying for the history data.\n */\n @state() protected querying?: boolean;\n\n /**\n * The page cursor for pagination.\n */\n protected pageCursor?: string;\n\n /**\n * The run configuration.\n */\n @property({ type: Object }) config?: IProjectRunnerOptions;\n\n @state() protected lastError?: string;\n\n protected history: IProjectExecution[] = [];\n\n protected queryPageDebouncer?: number;\n\n debounceTimeout = 100;\n\n /**\n * The key of the currently rendered report.\n */\n protected selectedReport?: string;\n\n /**\n * The currently rendered report.\n */\n @state() renderedReport?: IProjectExecution;\n\n constructor() {\n super();\n\n this.handleProjectRunCreated = this.handleProjectRunCreated.bind(this);\n this.handleProjectRunDeleted = this.handleProjectRunDeleted.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.addEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.create, this.handleProjectRunCreated as EventListenerOrEventListenerObject);\n window.removeEventListener(EventTypes.Store.ProjectRuns.State.delete, this.handleProjectRunDeleted as EventListenerOrEventListenerObject);\n }\n\n override willUpdate(cp: PropertyValues<this>): void {\n super.willUpdate(cp);\n if (cp.has('project') || cp.has('folder')) {\n this.setupRoot();\n }\n }\n\n protected setupRoot(): void {\n const { project, folder } = this;\n if (!project) {\n this.root = undefined;\n return;\n }\n if (!folder) {\n this.root = project;\n } else {\n this.root = project.findFolder(folder);\n }\n this.resetHistory();\n this.queryPageDebounce();\n }\n\n protected handleProjectRunCreated(e: ContextStateUpdateEvent<IProjectExecution>): void {\n const { parent } = e.detail;\n const item = e.detail.item as IProjectExecution;\n const { folder } = this;\n // parent is either folder (if the log has a folder) or the project.\n if (folder) {\n if (parent !== folder || !item.parent || item.parent !== folder) {\n return;\n }\n } else if (parent !== this.project?.key) {\n return;\n }\n this.history.push(item);\n this.history.sort(this.historySort);\n this.selectHistory(item.key);\n }\n\n protected handleProjectRunDeleted(e: ContextStateDeleteEvent): void {\n const { history } = this;\n const { key } = e.detail;\n const index = history.findIndex(i => i.key === key);\n if (index < 0) {\n return;\n }\n history.splice(index, 1);\n this.requestUpdate();\n if (this.selectedReport === key) {\n this.selectedReport = undefined;\n const [first] = history;\n if (first) {\n this.selectHistory(first.key);\n }\n }\n }\n\n protected handleRun(): void {\n this.execute();\n }\n\n /**\n * Executes the current configuration.\n */\n async execute(): Promise<void> {\n this.lastError = undefined;\n const { config = {}, folder, project } = this;\n if (!project) {\n return;\n }\n if (folder) {\n config.parent = folder;\n }\n const init: IHttpProjectProxyInit = {\n kind: HttpProjectKind,\n project: project.toJSON(),\n options: config,\n };\n \n this.running = true;\n try {\n const result = await CoreEvents.Transport.Core.httpProject(init, this);\n if (!result) {\n this.lastError = 'The project execution event was not handled.';\n } else {\n this.createHistory(result.result);\n }\n } catch (e) {\n this.lastError = (e as Error).message;\n }\n this.running = false;\n }\n\n protected async createHistory(result: IProjectExecutionLog): Promise<void> {\n const { appInfo, project } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on ${this.localName}`);\n }\n if (!project) {\n return;\n }\n await Events.Store.ProjectRuns.add({\n ...result,\n app: appInfo.code,\n project: project.key,\n key: '',\n kind: ProjectExecutionKind,\n midnight: 0,\n parent: this.folder,\n });\n }\n\n resetHistory(): void {\n this.querying = false;\n this.pageCursor = undefined;\n this.history = [];\n if (this.queryPageDebouncer) {\n clearTimeout(this.queryPageDebouncer);\n this.queryPageDebouncer = undefined;\n }\n }\n\n queryPageDebounce(): void {\n if (this.queryPageDebouncer) {\n return;\n }\n this.queryPageDebouncer = setTimeout(() => { \n this.queryPageDebouncer = undefined;\n this.queryPage();\n }, this.debounceTimeout) as unknown as number;\n }\n\n async queryPage(): Promise<void> {\n const { project, appInfo, folder, pageCursor } = this;\n if (this.querying || !project) {\n return;\n }\n this.querying = true;\n const opts: IProjectExecutionListOptions = {\n space: '',\n project: project.key,\n };\n if (appInfo) {\n opts.app = appInfo.code;\n }\n if (folder) {\n opts.parent = folder;\n }\n if (pageCursor) {\n opts.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.ProjectRuns.list(opts, this);\n if (!result) {\n throw new Error(`Project runs query not handled by the store.`);\n }\n const { items, cursor } = result;\n if (items.length) {\n if (cursor) {\n this.pageCursor = cursor;\n }\n this.history = this.history.concat(items);\n this.history.sort(this.historySort);\n if (!this.selectedReport) {\n const [last] = this.history;\n this.selectHistory(last.key);\n }\n this.requestUpdate();\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n } finally {\n this.querying = false;\n }\n }\n\n protected historySort(a: IProjectExecution, b: IProjectExecution): number {\n return b.ended - a.ended;\n }\n\n setRecursive(value: boolean): void {\n const { config = {} } = this;\n config.recursive = value;\n this.config = config;\n this.notifyChange();\n }\n\n setParallel(value: boolean): void {\n const { config = {} } = this;\n config.parallel = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterations(value: number): void {\n const { config = {} } = this;\n config.iterations = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterationDelay(value: number): void {\n const { config = {} } = this;\n config.iterationDelay = value;\n this.config = config;\n this.notifyChange();\n }\n\n protected handleRecursiveChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setRecursive(input.checked);\n }\n\n protected handleParallelChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setParallel(input.checked);\n }\n\n protected handleIterationsChange(e: Event): void {\n const input = e.target as Input;\n this.setIterations(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleIterationDelayChange(e: Event): void {\n const input = e.target as Input;\n this.setIterationDelay(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleHistorySelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { key } = element.dataset;\n if (!key) {\n return;\n }\n this.selectHistory(key);\n }\n\n selectHistory(key: string): void {\n this.selectedReport = key;\n const { history } = this;\n const report = history.find(i => i.key === key);\n if (report) {\n this.renderedReport = report;\n } else {\n this.renderedReport = undefined;\n }\n }\n\n protected override render(): TemplateResult {\n const { root } = this;\n if (!root) {\n return html``;\n }\n return html`\n <section id=\"config\">\n <div class=\"header title-large section-title\">Project runner for ${root.info.renderLabel}</div>\n <form name=\"run-config\" class=\"run-config surface1\">\n <div class=\"section-title title-medium\">Run configuration</div>\n ${this.renderRecursiveOption()}\n ${this.renderParallelOption()}\n ${this.renderIterationOption()}\n ${this.renderIterationDelayOption()}\n ${this.renderSubmit()}\n </form>\n ${this.renderError()}\n ${this.renderLoader()}\n ${this.renderReport()}\n </section>\n `;\n }\n\n protected renderRecursiveOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.recursive === 'boolean' ? config.recursive : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox \n id=\"recursive\"\n .checked=\"${value}\"\n name=\"recursive\" \n aria-labelledby=\"recursiveLabel\"\n aria-describedby=\"recursiveDescription\" \n @change=\"${this.handleRecursiveChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"recursive\" id=\"recursiveLabel\">\n Recursive\n </label>\n <p class=\"body-medium\" id=\"recursiveDescription\">\n Runs all requests from the current folder and its sub-folders\n </p>\n </div>\n `;\n }\n\n protected renderParallelOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.parallel === 'boolean' ? config.parallel : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox\n id=\"parallel\"\n .checked=\"${value}\"\n name=\"parallel\" \n aria-labelledby=\"parallelLabel\"\n aria-describedby=\"parallelDescription\" \n @change=\"${this.handleParallelChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"parallel\" id=\"parallelLabel\">\n Parallel\n </label>\n <p class=\"body-medium\" id=\"parallelDescription\">\n Runs each iteration in parallel. The number of actual execution depends on the number of cores on your device. \n This is ignored when number of iterations is 1.\n </p>\n </div>\n `;\n }\n\n protected renderIterationOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterations === 'number' ? config.iterations : 1;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required \n label=\"Iterations\"\n aria-describedby=\"iterationsDescription\" \n name=\"iterations\" \n type=\"number\" \n min=\"1\" \n step=\"1\" \n .value=\"${String(value)}\"\n @change=\"${this.handleIterationsChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationsDescription\">\n The number of times the execution should be repeated.\n </p>\n </div>\n `;\n }\n\n protected renderIterationDelayOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterationDelay === 'number' ? config.iterationDelay : 0;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required\n label=\"Iteration delay\"\n aria-describedby=\"iterationDelayDescription\"\n name=\"iterationDelay\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n .value=\"${String(value)}\"\n @change=\"${this.handleIterationDelayChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationDelayDescription\">\n The number of milliseconds to wait between each iteration.\n </p>\n </div>\n `;\n }\n\n protected renderSubmit(): TemplateResult {\n return html`\n <div class=\"submit-row\">\n <ui-button type=\"filled\" @click=\"${this.handleRun}\" ?disabled=\"${this.running}\">Run</ui-button>\n </div>\n `;\n }\n\n protected renderLoader(): TemplateResult | string {\n if (!this.running) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n\n protected renderError(): TemplateResult | string {\n const { lastError } = this;\n if (!lastError) {\n return '';\n }\n return html`<div class=\"error on-error-text body-large last-error\">${lastError}</div>`;\n }\n\n protected renderReport(): TemplateResult | typeof nothing {\n const { renderedReport, history } = this;\n if (!history.length) {\n return nothing;\n }\n return html`\n <section aria-label=\"Latest report\" class=\"report surface1\">\n <div class=\"section-title title-medium\">Run reports</div>\n ${this.renderHistorySelector()}\n <project-run-report .report=\"${renderedReport}\"></project-run-report>\n </section>\n `;\n }\n\n protected renderHistorySelector(): TemplateResult {\n const { history } = this;\n const disabled = !history.length;\n const selected = history.find(i => i.key === this.selectedReport);\n return html`\n <div class=\"history-selector\">\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleHistorySelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n ${selected ? html`<relative-time datetime=\"${new Date(selected.ended).toISOString()}\"></relative-time>` : 'History'}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${history.map(current => this.renderHistoryOption(current))}\n </ui-list>\n </ui-dropdown-list>\n </div>\n `;\n }\n\n renderHistoryOption(item: IProjectExecution): TemplateResult {\n const { ended, key } = item;\n const classes = {\n 'history-option': true,\n highlight: this.selectedReport === key,\n };\n const de = new Date(ended);\n return html`\n <ui-list-item role=\"menuitem\" data-key=\"${key}\" class=\"${classMap(classes)}\">\n <relative-time datetime=\"${de.toISOString()}\"></relative-time>\n </ui-list-item>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../src/elements/project/ProjectRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, PropertyValues, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { \n HttpProject, ProjectFolder, IProjectRunnerOptions, \n Events as CoreEvents, IProjectExecutionLog, \n IApplication, HttpProjectKind, \n IHttpProjectProxyInit,\n ProjectExecutionKind,\n IProjectExecution,\n IProjectExecutionListOptions,\n BroadcastEvent,\n ProjectExecutionDeleteBroadcastEvent,\n ProjectExecutionCreatedBroadcastEvent,\n} from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport type CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport type Input from '../../ui/input/Input.js';\nimport { Events } from '../../events/Events.js';\nimport '@github/relative-time-element';\nimport '../../define/http-project/project-run-report.js';\nimport '../../define/ui/ui-checkbox.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';\n\n/**\n * @fires change - When the configuration of the runner change.\n */\nexport default class ProjectRunner extends ApiElement {\n /**\n * A reference to the global shared variables.\n * Used with the communication with the execution server.\n */\n @property({ type: Object }) sharedVariables?: Record<string, string>;\n\n /**\n * The instance of the current project.\n */\n @property({ type: Object }) project?: HttpProject;\n\n /**\n * This property is required for the API access to work.\n * Set it to the current application information.\n */\n @property({ type: Object }) appInfo?: IApplication;\n\n /**\n * The key of the folder to render the runner for.\n * When not set, it renders the runner for the project.\n * @attribute\n */\n @property({ type: String, reflect: true }) folder?: string;\n\n /**\n * The object we operate on.\n */\n @state() protected root?: HttpProject | ProjectFolder;\n\n /**\n * Whether the element is currently running the project execution.\n */\n @state() protected running?: boolean;\n\n /**\n * Whether the element is currently querying for the history data.\n */\n @state() protected querying?: boolean;\n\n /**\n * The page cursor for pagination.\n */\n protected pageCursor?: string;\n\n /**\n * The run configuration.\n */\n @property({ type: Object }) config?: IProjectRunnerOptions;\n\n @state() protected lastError?: string;\n\n protected history: IProjectExecution[] = [];\n\n protected queryPageDebouncer?: number;\n\n debounceTimeout = 100;\n\n /**\n * The key of the currently rendered report.\n */\n protected selectedReport?: string;\n\n /**\n * The currently rendered report.\n */\n @state() renderedReport?: IProjectExecution;\n\n channel = new BroadcastChannel(StoreBroadcast.projectRuns);\n\n constructor() {\n super();\n\n this.handleBroadcast = this.handleBroadcast.bind(this);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.channel.addEventListener('message', this.handleBroadcast);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.channel.removeEventListener('message', this.handleBroadcast);\n }\n\n override willUpdate(cp: PropertyValues<this>): void {\n super.willUpdate(cp);\n if (cp.has('project') || cp.has('folder')) {\n this.setupRoot();\n }\n }\n\n protected handleBroadcast(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n switch (event.operation) {\n case 'created': this.handleProjectRunCreated(event as ProjectExecutionCreatedBroadcastEvent); break;\n case 'deleted': this.handleProjectRunDeleted(event as ProjectExecutionDeleteBroadcastEvent); break;\n default:\n }\n }\n\n protected setupRoot(): void {\n const { project, folder } = this;\n if (!project) {\n this.root = undefined;\n return;\n }\n if (!folder) {\n this.root = project;\n } else {\n this.root = project.findFolder(folder);\n }\n this.resetHistory();\n this.queryPageDebounce();\n }\n\n protected handleProjectRunCreated(event: ProjectExecutionCreatedBroadcastEvent): void {\n const { project, folder } = this;\n if (!project) {\n return;\n }\n if (project.key !== event.project) {\n return;\n }\n const item = event.data as IProjectExecution;\n if (folder && item.parent !== folder) {\n return;\n }\n this.history.push(item);\n this.history.sort(this.historySort);\n this.selectHistory(item.key);\n }\n\n protected handleProjectRunDeleted(event: ProjectExecutionDeleteBroadcastEvent): void {\n const { history, project } = this;\n if (!project) {\n return;\n }\n if (project.key !== event.project) {\n return;\n }\n const { key } = event;\n const index = history.findIndex(i => i.key === key);\n if (index < 0) {\n return;\n }\n history.splice(index, 1);\n this.requestUpdate();\n if (this.selectedReport === key) {\n this.selectedReport = undefined;\n const [first] = history;\n if (first) {\n this.selectHistory(first.key);\n }\n }\n }\n\n protected handleRun(): void {\n this.execute();\n }\n\n /**\n * Executes the current configuration.\n */\n async execute(): Promise<void> {\n this.lastError = undefined;\n const { config = {}, folder, project } = this;\n if (!project) {\n return;\n }\n if (folder) {\n config.parent = folder;\n }\n // Note, we intentionally don't add shared variables.\n // Project / folder execution should be contained and can only leak \n // out the variables to the rest of the app, not in.\n\n // if (sharedVariables && !config.variables) {\n // config.variables = sharedVariables;\n // }\n const init: IHttpProjectProxyInit = {\n kind: HttpProjectKind,\n project: project.toJSON(),\n options: config,\n };\n \n this.running = true;\n try {\n const result = await CoreEvents.Transport.Core.httpProject(init, this);\n if (!result) {\n this.lastError = 'The project execution event was not handled.';\n } else {\n this.mergeExecutedVariables(result.result);\n this.createHistory(result.result);\n }\n } catch (e) {\n this.lastError = (e as Error).message;\n }\n this.running = false;\n }\n\n mergeExecutedVariables(result: IProjectExecutionLog): void {\n const { sharedVariables } = this;\n if (!sharedVariables) {\n return;\n }\n\n result.iterations.forEach((iteration) => {\n const { variables } = iteration;\n if (!variables) {\n return;\n }\n Object.keys(variables).forEach((key) => {\n sharedVariables[key] = variables[key];\n });\n });\n\n }\n\n protected async createHistory(result: IProjectExecutionLog): Promise<void> {\n const { appInfo, project } = this;\n if (!appInfo) {\n throw new Error(`The appInfo is not set on ${this.localName}`);\n }\n if (!project) {\n return;\n }\n await Events.Store.ProjectRuns.add({\n ...result,\n app: appInfo.code,\n project: project.key,\n key: '',\n kind: ProjectExecutionKind,\n midnight: 0,\n parent: this.folder,\n });\n }\n\n resetHistory(): void {\n this.querying = false;\n this.pageCursor = undefined;\n this.history = [];\n if (this.queryPageDebouncer) {\n clearTimeout(this.queryPageDebouncer);\n this.queryPageDebouncer = undefined;\n }\n }\n\n queryPageDebounce(): void {\n if (this.queryPageDebouncer) {\n return;\n }\n this.queryPageDebouncer = setTimeout(() => { \n this.queryPageDebouncer = undefined;\n this.queryPage();\n }, this.debounceTimeout) as unknown as number;\n }\n\n async queryPage(): Promise<void> {\n const { project, appInfo, folder, pageCursor } = this;\n if (this.querying || !project) {\n return;\n }\n this.querying = true;\n const opts: IProjectExecutionListOptions = {\n space: '',\n project: project.key,\n };\n if (appInfo) {\n opts.app = appInfo.code;\n }\n if (folder) {\n opts.parent = folder;\n }\n if (pageCursor) {\n opts.cursor = pageCursor;\n }\n try {\n const result = await Events.Store.ProjectRuns.list(opts, this);\n if (!result) {\n throw new Error(`Project runs query not handled by the store.`);\n }\n const { items, cursor } = result;\n if (items.length) {\n if (cursor) {\n this.pageCursor = cursor;\n }\n this.history = this.history.concat(items);\n this.history.sort(this.historySort);\n if (!this.selectedReport) {\n const [last] = this.history;\n this.selectHistory(last.key);\n }\n this.requestUpdate();\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(e);\n } finally {\n this.querying = false;\n }\n }\n\n protected historySort(a: IProjectExecution, b: IProjectExecution): number {\n return b.ended - a.ended;\n }\n\n setRecursive(value: boolean): void {\n const { config = {} } = this;\n config.recursive = value;\n this.config = config;\n this.notifyChange();\n }\n\n setParallel(value: boolean): void {\n const { config = {} } = this;\n config.parallel = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterations(value: number): void {\n const { config = {} } = this;\n config.iterations = value;\n this.config = config;\n this.notifyChange();\n }\n\n setIterationDelay(value: number): void {\n const { config = {} } = this;\n config.iterationDelay = value;\n this.config = config;\n this.notifyChange();\n }\n\n protected handleRecursiveChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setRecursive(input.checked);\n }\n\n protected handleParallelChecked(e: Event): void {\n const input = e.target as CheckboxElement;\n this.setParallel(input.checked);\n }\n\n protected handleIterationsChange(e: Event): void {\n const input = e.target as Input;\n this.setIterations(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleIterationDelayChange(e: Event): void {\n const input = e.target as Input;\n this.setIterationDelay(input.valueAsNumber)\n input.checkValidity();\n }\n\n protected handleHistorySelection(e: CustomEvent): void {\n const element = e.detail.item as HTMLElement;\n const { key } = element.dataset;\n if (!key) {\n return;\n }\n this.selectHistory(key);\n }\n\n selectHistory(key: string): void {\n this.selectedReport = key;\n const { history } = this;\n const report = history.find(i => i.key === key);\n if (report) {\n this.renderedReport = report;\n } else {\n this.renderedReport = undefined;\n }\n }\n\n protected override render(): TemplateResult {\n const { root } = this;\n if (!root) {\n return html``;\n }\n return html`\n <section id=\"config\">\n <div class=\"header title-large section-title\">Project runner for ${root.info.renderLabel}</div>\n <form name=\"run-config\" class=\"run-config surface1\">\n <div class=\"section-title title-medium\">Run configuration</div>\n ${this.renderRecursiveOption()}\n ${this.renderParallelOption()}\n ${this.renderIterationOption()}\n ${this.renderIterationDelayOption()}\n ${this.renderSubmit()}\n </form>\n ${this.renderError()}\n ${this.renderLoader()}\n ${this.renderReport()}\n </section>\n `;\n }\n\n protected renderRecursiveOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.recursive === 'boolean' ? config.recursive : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox \n id=\"recursive\"\n .checked=\"${value}\"\n name=\"recursive\" \n aria-labelledby=\"recursiveLabel\"\n aria-describedby=\"recursiveDescription\" \n @change=\"${this.handleRecursiveChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"recursive\" id=\"recursiveLabel\">\n Recursive\n </label>\n <p class=\"body-medium\" id=\"recursiveDescription\">\n Runs all requests from the current folder and its sub-folders\n </p>\n </div>\n `;\n }\n\n protected renderParallelOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.parallel === 'boolean' ? config.parallel : false;\n return html`\n <div class=\"form-row\">\n <ui-checkbox\n id=\"parallel\"\n .checked=\"${value}\"\n name=\"parallel\" \n aria-labelledby=\"parallelLabel\"\n aria-describedby=\"parallelDescription\" \n @change=\"${this.handleParallelChecked}\"\n ></ui-checkbox>\n <label class=\"label-large\" for=\"parallel\" id=\"parallelLabel\">\n Parallel\n </label>\n <p class=\"body-medium\" id=\"parallelDescription\">\n Runs each iteration in parallel. The number of actual execution depends on the number of cores on your device. \n This is ignored when number of iterations is 1.\n </p>\n </div>\n `;\n }\n\n protected renderIterationOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterations === 'number' ? config.iterations : 1;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required \n label=\"Iterations\"\n aria-describedby=\"iterationsDescription\" \n name=\"iterations\" \n type=\"number\" \n min=\"1\" \n step=\"1\" \n .value=\"${String(value)}\"\n @change=\"${this.handleIterationsChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationsDescription\">\n The number of times the execution should be repeated.\n </p>\n </div>\n `;\n }\n\n protected renderIterationDelayOption(): TemplateResult {\n const { config = {} } = this;\n const value = typeof config.iterationDelay === 'number' ? config.iterationDelay : 0;\n return html`\n <div class=\"form-row\">\n <ui-text-field\n required\n label=\"Iteration delay\"\n aria-describedby=\"iterationDelayDescription\"\n name=\"iterationDelay\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n .value=\"${String(value)}\"\n @change=\"${this.handleIterationDelayChange}\"\n ></ui-text-field>\n <p class=\"body-medium\" id=\"iterationDelayDescription\">\n The number of milliseconds to wait between each iteration.\n </p>\n </div>\n `;\n }\n\n protected renderSubmit(): TemplateResult {\n return html`\n <div class=\"submit-row\">\n <ui-button type=\"filled\" @click=\"${this.handleRun}\" ?disabled=\"${this.running}\">Run</ui-button>\n </div>\n `;\n }\n\n protected renderLoader(): TemplateResult | string {\n if (!this.running) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n\n protected renderError(): TemplateResult | string {\n const { lastError } = this;\n if (!lastError) {\n return '';\n }\n return html`<div class=\"error on-error-text body-large last-error\">${lastError}</div>`;\n }\n\n protected renderReport(): TemplateResult | typeof nothing {\n const { renderedReport, history } = this;\n if (!history.length) {\n return nothing;\n }\n return html`\n <section aria-label=\"Latest report\" class=\"report surface1\">\n <div class=\"section-title title-medium\">Run reports</div>\n ${this.renderHistorySelector()}\n <project-run-report .report=\"${renderedReport}\"></project-run-report>\n </section>\n `;\n }\n\n protected renderHistorySelector(): TemplateResult {\n const { history } = this;\n const disabled = !history.length;\n const selected = history.find(i => i.key === this.selectedReport);\n return html`\n <div class=\"history-selector\">\n <ui-dropdown-list\n verticalAlign=\"top\"\n class=\"history-dropdown\"\n closeOnOutsideClick\n @select=\"${this.handleHistorySelection}\"\n >\n <ui-button type=\"tonal\" ?disabled=\"${disabled}\">\n <ui-icon slot=\"icon\" icon=\"arrowDropDown\"></ui-icon>\n ${selected ? html`<relative-time datetime=\"${new Date(selected.ended).toISOString()}\"></relative-time>` : 'History'}\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\" aria-label=\"History list\">\n ${history.map(current => this.renderHistoryOption(current))}\n </ui-list>\n </ui-dropdown-list>\n </div>\n `;\n }\n\n renderHistoryOption(item: IProjectExecution): TemplateResult {\n const { ended, key } = item;\n const classes = {\n 'history-option': true,\n highlight: this.selectedReport === key,\n };\n const de = new Date(ended);\n return html`\n <ui-list-item role=\"menuitem\" data-key=\"${key}\" class=\"${classMap(classes)}\">\n <relative-time datetime=\"${de.toISOString()}\"></relative-time>\n </ui-list-item>\n `;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataModelVisualizationElement.d.ts","sourceRoot":"","sources":["../../../src/elements/schema-design/DataModelVisualizationElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACxH,OAAO,EAAQ,cAAc,EAAE,OAAO,EAAE,SAAS,EAAO,cAAc,EAAE,MAAM,KAAK,CAAC;AAKpF,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,qDAAqD,CAAC;AAEtF,OAAO,6CAA6C,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAExF,UAAU,QAAQ;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAClE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,UAAU;IACnE,WAAoB,MAAM,IAAI,SAAS,EAAE,CAsFxC;IAED;;OAEG;IACwC,GAAG,CAAC,EAAE,MAAM,CAAC;IAExD;;OAEG;IACyB,IAAI,CAAC,EAAE,aAAa,CAAC;IAEjD;;OAEG;IACM,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAE7B,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEd,SAAS,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEnE,SAAS,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC;IAEhD,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE/B,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAY5C,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;cAUlB,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM7D;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;cAUf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3C,SAAS,CAAC,cAAc,IAAI,IAAI;cAkEhB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;cAmB9C,MAAM,IAAI,cAAc;IAQ3C,SAAS,CAAC,cAAc,IAAI,cAAc,EAAE,GAAG,OAAO,OAAO;IAQ7D,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc;IAqB/D,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc;IASrE,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IAgBnE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,OAAO;IAkBtF,SAAS,CAAC,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;CAQjE"}
1
+ {"version":3,"file":"DataModelVisualizationElement.d.ts","sourceRoot":"","sources":["../../../src/elements/schema-design/DataModelVisualizationElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACxH,OAAO,EAAQ,cAAc,EAAE,OAAO,EAAE,SAAS,EAAO,cAAc,EAAE,MAAM,KAAK,CAAC;AAKpF,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,mBAAmB,MAAM,qDAAqD,CAAC;AAEtF,OAAO,6CAA6C,CAAC;AACrD,OAAO,+CAA+C,CAAC;AACvD,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAExF,UAAU,QAAQ;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAClE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,UAAU;IACnE,WAAoB,MAAM,IAAI,SAAS,EAAE,CA4FxC;IAED;;OAEG;IACwC,GAAG,CAAC,EAAE,MAAM,CAAC;IAExD;;OAEG;IACyB,IAAI,CAAC,EAAE,aAAa,CAAC;IAEjD;;OAEG;IACM,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAE7B,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEd,SAAS,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAEnE,SAAS,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC;IAEhD,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAE/B,YAAY,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAY5C,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;cAUlB,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAM7D;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;cAUf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3C,SAAS,CAAC,cAAc,IAAI,IAAI;cAkEhB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;cAmB9C,MAAM,IAAI,cAAc;IAQ3C,SAAS,CAAC,cAAc,IAAI,cAAc,EAAE,GAAG,OAAO,OAAO;IAQ7D,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc;IAqB/D,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc;IASrE,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IA2BnE,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,OAAO;IAkBtF,SAAS,CAAC,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;CAQjE"}
@@ -96,6 +96,12 @@ export default class DataModelVisualizationElement extends ApiElement {
96
96
  .data-type {
97
97
  margin-left: auto;
98
98
  }
99
+
100
+ .property-key-icon {
101
+ width: 16px;
102
+ height: 16px;
103
+ margin-right: 8px;
104
+ }
99
105
  `,
100
106
  ];
101
107
  }
@@ -309,8 +315,19 @@ export default class DataModelVisualizationElement extends ApiElement {
309
315
  primary,
310
316
  index,
311
317
  };
318
+ const icons = [];
319
+ if (primary) {
320
+ icons.push(html `<ui-icon icon="key" class="property-key-icon"></ui-icon>`);
321
+ }
322
+ else if (index) {
323
+ icons.push(html `<ui-icon icon="search" class="property-key-icon"></ui-icon>`);
324
+ }
325
+ else {
326
+ icons.push(html `<span class="property-key-icon"></span>`);
327
+ }
312
328
  return html `
313
329
  <li data-key="${key}" class="${classMap(classes)}">
330
+ ${icons}
314
331
  <span class="label">${info.renderLabel}</span>
315
332
  <span class="data-type">${type}</span>
316
333
  </li>
@@ -324,7 +341,7 @@ export default class DataModelVisualizationElement extends ApiElement {
324
341
  if (targets.length === 1) {
325
342
  return html `<viz-association
326
343
  data-key="${key}"
327
- data-target="${targets[0]}"
344
+ data-target="${targets[0].key}"
328
345
  title="${info.renderLabel}"
329
346
  data-selectable
330
347
  data-marker-start="association"