diff --git a/src/management-system-v2/app/(dashboard)/[environmentId]/machine-config/[configId]/config-editor.tsx b/src/management-system-v2/app/(dashboard)/[environmentId]/machine-config/[configId]/config-editor.tsx index 377bc9c51..da67487ff 100644 --- a/src/management-system-v2/app/(dashboard)/[environmentId]/machine-config/[configId]/config-editor.tsx +++ b/src/management-system-v2/app/(dashboard)/[environmentId]/machine-config/[configId]/config-editor.tsx @@ -29,6 +29,7 @@ import { Radio, Collapse, Typography, + App, } from 'antd'; import useMobileModeler from '@/lib/useMobileModeler'; @@ -49,28 +50,42 @@ import AddButton from './add-button'; import ConfigModal from '@/components/config-modal'; import { addMachineConfig, + addParentConfigVersion, addTargetConfig, removeTargetConfig, + setParentConfigVersionAsLatest, updateMachineConfig, updateParentConfig, updateTargetConfig, } from '@/lib/data/legacy/machine-config'; import ActionButtons from './action-buttons'; +import ConfirmationButton from '@/components/confirmation-button'; +import { v4 } from 'uuid'; +import { wrapServerCall } from '@/lib/wrap-server-call'; type MachineDataViewProps = { selectedConfig: AbstractConfig; parentConfig: ParentConfig; editable: boolean; + editingAllowed: boolean; onChangeEditable: (isEditable: boolean) => void; }; -const LATEST_VERSION = { version: -1, name: 'Latest Version', description: '' }; +const LATEST_VERSION = { + id: '-1', + name: 'Latest Version', + description: '', + versionBasedOn: '', + createdOn: new Date(), +}; const ConfigEditor: React.FC = ({ selectedConfig, parentConfig, editable, + editingAllowed, onChangeEditable, }) => { + const app = App.useApp(); const router = useRouter(); const environment = useEnvironment(); const query = useSearchParams(); @@ -105,25 +120,66 @@ const ConfigEditor: React.FC = ({ } = theme.useToken(); const selectedVersion = - selectedConfig.versions.find( - (version: any) => version.version === parseInt(selectedVersionId ?? '-1'), - ) ?? LATEST_VERSION; + parentConfig.versions.find((version: any) => version.id === (selectedVersionId ?? '')) ?? + LATEST_VERSION; + + // TODO use FuzzySearch + // currently only ignores capitalization const filterOption: SelectProps['filterOption'] = (input, option) => ((option?.label as string) ?? '').toLowerCase().includes(input.toLowerCase()); - // const createConfigVersion = async (values: { - // versionName: string; - // versionDescription: string; - // }) => { - // selectedConfig.versions.push({ - // version: selectedConfig.versions.length + 1, - // name: values.versionName, - // description: values.versionDescription, - // versionBasedOn: selectedConfig.versions.length, - // }); - // await saveParentConfig(configId, parentConfig); - // router.refresh(); - // }; + const createConfigVersion = async (values: { + versionName: string; + versionDescription: string; + }) => { + const versionId = v4(); + wrapServerCall({ + fn: () => + addParentConfigVersion( + parentConfig, + environment.spaceId, + versionId, + values.versionName, + values.versionDescription, + ), + onSuccess: () => { + router.refresh(); + app.message.success({ + content: ( + + Version {values.versionName} successfully created + + ), + }); + }, + onError: () => { + app.message.success(`Creation of version failed`); + }, + }); + }; + + const makeConfigVersionLatest = async () => { + wrapServerCall({ + fn: () => setParentConfigVersionAsLatest(parentConfig), + onSuccess: () => { + const searchParams = new URLSearchParams(query); + searchParams.delete('version'); + router.push( + spaceURL( + environment, + `/machine-config/${parentConfig.id as string}${ + searchParams.size ? '?' + searchParams.toString() : '' + }`, + ), + ); + router.refresh(); + app.message.success(`Version successfully set as latest`); + }, + onError: () => { + app.message.success(`There was an error setting this version as latest`); + }, + }); + }; const showMobileView = useMobileModeler(); @@ -321,34 +377,35 @@ const ConfigEditor: React.FC = ({ {selectedConfig.name} - {/* + +