Skip to content

Commit

Permalink
Add table for user access settings (#634)
Browse files Browse the repository at this point in the history
  • Loading branch information
s-andrey authored Feb 13, 2020
1 parent 875957b commit b866c69
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 9 deletions.
99 changes: 97 additions & 2 deletions addon/controllers/fd-setting.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import Controller from '@ember/controller';
import FdSheetCloseConfirm from '../mixins/fd-sheet-close-confirm';
import FdReadonlyProjectMixin from '../mixins/fd-readonly-project';
import { A } from '@ember/array';
import { inject as service } from '@ember/service';
import { resolve, reject } from 'rsvp';
import { isNone, isBlank } from '@ember/utils';
import { transliteration } from '../utils/fd-transliteration';
import { set, computed } from '@ember/object';

import { SimplePredicate, ComplexPredicate } from 'ember-flexberry-data/query/predicate';
import Builder from 'ember-flexberry-data/query/builder';
Expand Down Expand Up @@ -44,6 +46,44 @@ export default Controller.extend(FdSheetCloseConfirm, FdReadonlyProjectMixin, {
*/
accessIsPublic: true,

/**
Table headers.
@property tableUsersAccess
@type Array
*/
tableUsersAccess: computed(() => (
A([{
columnCaption: 'forms.fd-setting.access-settings.name-user-caption',
columnProperty: 'name',
attrPlaceholder: 'forms.fd-setting.access-settings.name-user-placeholder',
columnClass: 'three'
},
{
columnCaption: 'forms.fd-setting.access-settings.login-user-caption',
columnProperty: 'login',
attrPlaceholder: 'forms.fd-setting.access-settings.login-user-placeholder',
columnClass: 'four'
},
{
columnCaption: 'forms.fd-setting.access-settings.user-access-caption',
columnProperty: 'access',
columnClass: 'four',
isDropDown: true,
}])
)),

/**
Button locale path for usersAccessButton.
@property usersAccessButton
@type Object
*/
usersAccessButton: computed(() => ({
createBtn: 'forms.fd-setting.access-settings.create-btn',
deleteBtn: 'forms.fd-setting.access-settings.delete-btn',
})),

/**
Check lexical structure.
Expand Down Expand Up @@ -99,17 +139,38 @@ export default Controller.extend(FdSheetCloseConfirm, FdReadonlyProjectMixin, {
@method actions.save
*/
save() {
let adapter = this.get('store').adapterFor('application');
let stage = this.get('model.stage');

this.get('appState').loading();
this.validateData(stage)
.then(() => stage.save())
.then(() => {
let adapter = this.get('store').adapterFor('application');
let data = { 'project': stage.get('id'), 'moduleSettings': JSON.stringify(this.get('model.settings')) };

return adapter.callAction('SaveCurrentModuleSettings', data, null, { withCredentials: true });
})
.then(() => {
let usersAccess = this.get('model.usersAccess');
if (!isNone(usersAccess)) {
let data = { 'project': stage.get('id'), 'newUsersInStage': JSON.stringify(usersAccess) };

return adapter.callAction('SaveUsersAccessForStage', data, null, { withCredentials: true });
}

return resolve();
})
.then((usersAccessForStage) => {
if (!isNone(usersAccessForStage)) {
let newUsersAccess = JSON.parse(usersAccessForStage.value);
this.set('model.usersAccess', A(newUsersAccess.data));
if (newUsersAccess.errors.length !== 0) {
return reject({ message: this.get('i18n').t('forms.fd-setting.error-message.empty-username').toString() + newUsersAccess.errors.join(', ') });
}
}

return resolve();
})
.catch((error) => {
this.get('fdDialogService').showErrorMessage(error.message);
})
Expand Down Expand Up @@ -137,6 +198,40 @@ export default Controller.extend(FdSheetCloseConfirm, FdReadonlyProjectMixin, {
.finally(() => {
this.get('appState').reset();
});
}
},

/**
Create 'UserAccess'.
@method actions.createUserAccess
*/
createUserAccess() {
let usersAccess = this.get('model.usersAccess');
usersAccess.pushObject({
name: undefined,
login: undefined,
access: undefined
});
},

/**
Method remove 'store instances in type' from table.
@method actions.deleteUserAccess
*/
deleteUserAccess(selectedValues) {
let usersAccess = this.get('model.usersAccess');
usersAccess.removeObjects(selectedValues);
selectedValues.clear();
},

/**
Update 'Access'.
@method actions.dropdownChangeAccess
*/
dropdownChangeAccess(model, value) {
set(model, 'access', value);
},
}
});
11 changes: 11 additions & 0 deletions addon/locales/en/forms/fd-setting.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,20 @@ export default {
'pri-key-placeholder': 'Enter the private SSH key',
'frontend-publish': 'Publish an application to gh-pages',
},
'access-settings-caption': 'Members',
'access-settings': {
'name-user-caption': 'Username',
'name-user-placeholder': 'Username will load after saving',
'login-user-caption': 'user login',
'login-user-placeholder': 'Enter user login',
'user-access-caption': 'User permissions',
'create-btn': 'Add new member',
'delete-btn': 'Delete member'
},
'save-button': 'Save',
'error-message': {
'empty-name': 'Stage name cannot be empty',
'exist-stage': 'Stage with the same name already exists',
'empty-username': 'There are no users in the system with logins: '
}
};
11 changes: 11 additions & 0 deletions addon/locales/ru/forms/fd-setting.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,20 @@ export default {
'pri-key-placeholder': 'Введите закрытый SSH ключ',
'frontend-publish': 'Публикация приложения в gh-pages',
},
'access-settings-caption': 'Участники',
'access-settings': {
'name-user-caption': 'Имя пользователя',
'name-user-placeholder': 'Имя пользователя загрузится после сохранения',
'login-user-caption': 'Логин пользователя',
'login-user-placeholder': 'Введите логин пользователя',
'user-access-caption': 'Права доступа пользователя',
'create-btn': 'Добавить нового участника',
'delete-btn': 'Удалить участника'
},
'save-button': 'Сохранить',
'error-message': {
'empty-name': 'Имя стадии не может быть пустое',
'exist-stage': 'Стадия с таким именем уже существует',
'empty-username': 'В системе отсутствуют пользователи с логинами: '
}
};
25 changes: 18 additions & 7 deletions addon/routes/fd-setting.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import Route from '@ember/routing/route';
import { A } from '@ember/array';
import { inject as service } from '@ember/service';
import { isBlank } from '@ember/utils';

export default Route.extend({

Expand All @@ -21,19 +23,28 @@ export default Route.extend({
generationSettings: undefined,

model() {
let modelHash = {
stage: undefined,
settings: undefined,
usersAccess: undefined,
};

const store = this.get('store');
const stage = this.get('currentProjectContext').getCurrentStageModel();
modelHash.stage = this.get('currentProjectContext').getCurrentStageModel();

const adapter = store.adapterFor('application');
const data = { 'project': stage.get('id'), 'moduleSettingTypes': this.get('generationSettings') };
const data = { 'project': modelHash.stage.get('id'), 'moduleSettingTypes': this.get('generationSettings') };

return adapter.callAction('GetCurrentModuleSettings', data, null, { withCredentials: true }).then((generationSettings) => {
let currentGenerationSettings = JSON.parse(generationSettings.value);
modelHash.settings = JSON.parse(generationSettings.value);

return adapter.callFunction('GetUsersAccessForStage', { project: modelHash.stage.get('id').toString() }, null, { withCredentials: true }).then((usersAccess) => {
if (!isBlank(usersAccess.value)) {
modelHash.usersAccess = A(JSON.parse(usersAccess.value));
}

return {
stage: stage,
settings: currentGenerationSettings
};
return modelHash;
});
});
},

Expand Down
20 changes: 20 additions & 0 deletions app/templates/fd-setting.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,26 @@
</div>
</div>

{{#if model.usersAccess}}
<h2 class="form-header">{{t "forms.fd-setting.access-settings-caption"}}</h2>
<div class="ui stackable grid fd-list-edited">
<div class="row">
<div class="sixteen wide column light-text">
{{fd-attribute-table
tableView=tableUsersAccess
buttonCaption=usersAccessButton
dropdownItemsObject=(flexberry-enum 'new-platform-flexberry-web-designer-access-mode')
model=model.usersAccess
create=(action 'createUserAccess')
delete=(action 'deleteUserAccess')
dropdownChange=(action 'dropdownChangeAccess')
readonly=readonlyModeProject
}}
</div>
</div>
</div>
{{/if}}

<h2 class="form-header">{{t "forms.fd-setting.project-actions-caption"}}</h2>
<div class="ui stackable grid">
<div class="row">
Expand Down

0 comments on commit b866c69

Please sign in to comment.