Matthew Irish 373b5d6a25
UI - replication path filtering (#7620)
* rename mount-filter-config models, components, serializer, adapters to path-filter-config

* move search-select component to core addon

* add js class for search-select-placeholder and sort out power-select deps for moving to the core component

* expose oninput from powerselect through search-select

* don't fetch mounts in the replication routes

* remove toggle from add template

* start cross-namespace fetching

* group options and set up for namespace fetch via power-select search prop

* add and style up radio-card CSS component

* add xlm size for icons between l and xl

* copy defaults so they're not getting mutated

* finalize cross-namespace fetching and getting that to work with power-select

* when passing options but no models, format the options in search select so that they render properly in the list

* tint the background of a selected radio card

* default to null mode and uniq options in search-select

* finish styling radio-card

* format inputValues when first rendering the component if options are being passed from outside

* treat mode:null as deleting existing config which simplifies save logic

* correctly prune the auto complete list since path-filter-config-list handles all of that and finish styling

* remove old component

* add search debounce and fix linting

* update search-select docs

* updating tests

* support grouped options for when to show the create prompt

* update and add tests for path-filter-config-list

* fix tests for search-select and path-filter-config-list

* the new api uses allow/deny instead of whitelist/blacklist
2019-10-25 13:16:45 -05:00

53 lines
1.6 KiB
JavaScript

import { alias } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
export default Controller.extend({
flashMessages: service(),
rm: service('replication-mode'),
replicationMode: alias('rm.mode'),
actions: {
resetConfig(config) {
if (config.get('isNew')) {
config.setProperties({
mode: null,
paths: [],
});
} else {
config.rollbackAttributes();
}
},
saveConfig(config) {
// if the mode is null, we want no filtering, so we should delete any existing config
let isDelete = config.mode === null;
const flash = this.get('flashMessages');
const id = config.id;
const redirectArgs = isDelete
? ['mode.secondaries', this.get('replicationMode')]
: ['mode.secondaries.config-show', id];
const modelMethod = isDelete ? config.destroyRecord : config.save;
modelMethod
.call(config)
.then(() => {
this.transitionToRoute(...redirectArgs)
.followRedirects()
.then(() => {
flash.success(
`The performance mount filter config for the secondary ${id} was successfully ${
isDelete ? 'deleted' : 'saved'
}.`
);
});
})
.catch(e => {
const errString = e.errors.join('.');
flash.error(
`There was an error ${isDelete ? 'deleting' : 'saving'} the config for ${id}: ${errString}`
);
});
},
},
});