import * as plugins from '../../../plugins.js'; import * as shared from '../../shared/index.js'; import { DeesElement, customElement, html, state, css, cssManager } from '@design.estate/dees-element'; import * as appstate from '../../../appstate.js'; @customElement('cloudly-view-images') export class CloudlyViewImages extends DeesElement { @state() private data: appstate.IDataState = {} as any; constructor() { super(); appstate.dataState .select((stateArg) => stateArg) .subscribe((dataArg) => { this.data = dataArg; }); } public static styles = [ cssManager.defaultStyles, shared.viewHostCss, css``, ]; public render() { return html` Images { return { id: image.id, name: image.data.name, description: image.data.description, versions: image.data.versions.length }; }} .dataActions=${[ { name: 'create Image', type: ['header', 'footer'], iconName: 'plus', actionFunc: async () => { plugins.deesCatalog.DeesModal.createAndShow({ heading: 'create new Image', content: html` `, menuOptions: [ { name: 'cancel', action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'save', action: async (modalArg: any) => { const deesForm = modalArg.shadowRoot.querySelector('dees-form'); const formData = await deesForm.collectFormData(); await appstate.dataState.dispatchAction(appstate.createImageAction, { imageName: formData['data.name'] as string, description: formData['data.description'] as string }); await modalArg.destroy(); } }, ], }); }, }, { name: 'edit', type: ['contextmenu', 'inRow', 'doubleClick'], iconName: 'penToSquare', actionFunc: async (dataArg: plugins.deesCatalog.ITableActionDataArg) => { const environmentsArray: Array = []; for (const environmentName of Object.keys(dataArg.item.data.environments)) { environmentsArray.push({ environment: environmentName, ...dataArg.item.data.environments[environmentName] }); } await plugins.deesCatalog.DeesModal.createAndShow({ heading: 'Edit Secret', content: html` ({ environment: itemArg.environment, value: itemArg.value }))} .editableFields=${['environment', 'value']} .dataActions=${[{ name: 'delete', iconName: 'trash', type: ['inRow'], actionFunc: async (actionDataArg: any) => { actionDataArg.table.data.splice(actionDataArg.table.data.indexOf(actionDataArg.item), 1); } }] as plugins.deesCatalog.ITableAction[]}> `, menuOptions: [ { name: 'Cancel', iconName: null, action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'Save', iconName: null, action: async (modalArg: any) => { const data = await modalArg.shadowRoot.querySelector('dees-form').collectFormData(); console.log(data); } }, ], }); }, }, { name: 'history', iconName: 'clockRotateLeft', type: ['contextmenu', 'inRow'], actionFunc: async (dataArg: plugins.deesCatalog.ITableActionDataArg) => { const historyArray: Array<{ environment: string; value: string; }> = []; for (const environment of Object.keys(dataArg.item.data.environments)) { for (const historyItem of dataArg.item.data.environments[environment].history) { historyArray.push({ environment, value: historyItem.value }); } } await plugins.deesCatalog.DeesModal.createAndShow({ heading: `history for ${dataArg.item.data.key}`, content: html`) => { console.log('delete', itemArg); }, }] as plugins.deesCatalog.ITableAction[]}>`, menuOptions: [ { name: 'close', action: async (modalArg: any) => { await modalArg.destroy(); } } ], }); }, }, { name: 'delete', iconName: 'trash', type: ['contextmenu', 'inRow'], actionFunc: async (itemArg: plugins.deesCatalog.ITableActionDataArg) => { plugins.deesCatalog.DeesModal.createAndShow({ heading: `Delete Image "${itemArg.item.data.name}"`, content: html`
Do you really want to delete the image?
${itemArg.item.id}
`, menuOptions: [ { name: 'cancel', action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'delete', action: async (modalArg: any) => { await appstate.dataState.dispatchAction(appstate.deleteImageAction, { imageId: itemArg.item.id, }); await modalArg.destroy(); } }, ], }); }, }, ] as plugins.deesCatalog.ITableAction[]} >
`; } } declare global { interface HTMLElementTagNameMap { 'cloudly-view-images': CloudlyViewImages; } }