|
|
@@ -11,15 +11,6 @@ function saveTableConfig(): void {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * Delete all selected columns, which reverts the user's preferences to the default column set.
|
|
|
- */
|
|
|
-function resetTableConfig(): void {
|
|
|
- for (const element of getElements<HTMLSelectElement>('select[name="columns"]')) {
|
|
|
- element.value = '';
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* Add columns to the table config select element.
|
|
|
*/
|
|
|
@@ -53,7 +44,10 @@ function removeColumns(event: Event): void {
|
|
|
/**
|
|
|
* Submit form configuration to the NetBox API.
|
|
|
*/
|
|
|
-async function submitFormConfig(url: string, formConfig: Dict<Dict>): Promise<APIResponse<APIUserConfig>> {
|
|
|
+async function submitFormConfig(
|
|
|
+ url: string,
|
|
|
+ formConfig: Dict<Dict>,
|
|
|
+): Promise<APIResponse<APIUserConfig>> {
|
|
|
return await apiPatch<APIUserConfig>(url, formConfig);
|
|
|
}
|
|
|
|
|
|
@@ -70,25 +64,46 @@ function handleSubmit(event: Event): void {
|
|
|
const url = element.getAttribute('data-url');
|
|
|
if (url == null) {
|
|
|
const toast = createToast(
|
|
|
- 'danger',
|
|
|
- 'Error Updating Table Configuration',
|
|
|
- 'No API path defined for configuration form.'
|
|
|
+ 'danger',
|
|
|
+ 'Error Updating Table Configuration',
|
|
|
+ 'No API path defined for configuration form.',
|
|
|
);
|
|
|
toast.show();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // Determine if the form action is to reset the table config.
|
|
|
+ const reset = document.activeElement?.getAttribute('value') === 'Reset';
|
|
|
+
|
|
|
+ // Create an array from the dot-separated config path. E.g. tables.DevicePowerOutletTable becomes
|
|
|
+ // ['tables', 'DevicePowerOutletTable']
|
|
|
+ const path = element.getAttribute('data-config-root')?.split('.') ?? [];
|
|
|
+
|
|
|
+ if (reset) {
|
|
|
+ // If we're resetting the table config, create an empty object for this table. E.g.
|
|
|
+ // tables.PlatformTable becomes {tables: PlatformTable: {}}
|
|
|
+ const data = path.reduceRight<Dict<Dict>>((value, key) => ({ [key]: value }), {});
|
|
|
+
|
|
|
+ // Submit the reset for configuration to the API.
|
|
|
+ submitFormConfig(url, data).then(res => {
|
|
|
+ if (hasError(res)) {
|
|
|
+ const toast = createToast('danger', 'Error Resetting Table Configuration', res.error);
|
|
|
+ toast.show();
|
|
|
+ } else {
|
|
|
+ location.reload();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// Get all the selected options from any select element in the form.
|
|
|
- const options = getSelectedOptions(element);
|
|
|
+ const options = getSelectedOptions(element, 'select[name=columns]');
|
|
|
|
|
|
// Create an object mapping the select element's name to all selected options for that element.
|
|
|
const formData: Dict<Dict<string>> = Object.assign(
|
|
|
{},
|
|
|
...options.map(opt => ({ [opt.name]: opt.options })),
|
|
|
);
|
|
|
- // Create an array from the dot-separated config path. E.g. tables.DevicePowerOutletTable becomes
|
|
|
- // ['tables', 'DevicePowerOutletTable']
|
|
|
- const path = element.getAttribute('data-config-root')?.split('.') ?? [];
|
|
|
|
|
|
// Create an object mapping the configuration path to the select element names, which contain the
|
|
|
// selection options. E.g. {tables: {DevicePowerOutletTable: {columns: ['label', 'type']}}}
|
|
|
@@ -112,9 +127,6 @@ export function initTableConfig(): void {
|
|
|
for (const element of getElements<HTMLButtonElement>('#save_tableconfig')) {
|
|
|
element.addEventListener('click', saveTableConfig);
|
|
|
}
|
|
|
- for (const element of getElements<HTMLButtonElement>('#reset_tableconfig')) {
|
|
|
- element.addEventListener('click', resetTableConfig);
|
|
|
- }
|
|
|
for (const element of getElements<HTMLButtonElement>('#add_columns')) {
|
|
|
element.addEventListener('click', addColumns);
|
|
|
}
|