49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import $ from 'jquery';
|
|
import { slugify } from './lib/utils/text_utility';
|
|
import fetchGroupPathAvailability from '~/pages/groups/new/fetch_group_path_availability';
|
|
import flash from '~/flash';
|
|
import { __ } from '~/locale';
|
|
|
|
export default class Group {
|
|
constructor() {
|
|
this.groupPath = $('#group_path');
|
|
this.groupName = $('#group_name');
|
|
this.parentId = $('#group_parent_id');
|
|
this.updateHandler = this.update.bind(this);
|
|
this.resetHandler = this.reset.bind(this);
|
|
this.updateGroupPathSlugHandler = this.updateGroupPathSlug.bind(this);
|
|
if (this.groupName.val() === '') {
|
|
this.groupName.on('keyup', this.updateHandler);
|
|
this.groupPath.on('keydown', this.resetHandler);
|
|
if (!this.parentId.val()) {
|
|
this.groupName.on('blur', this.updateGroupPathSlugHandler);
|
|
}
|
|
}
|
|
}
|
|
|
|
update() {
|
|
const slug = slugify(this.groupName.val());
|
|
this.groupPath.val(slug);
|
|
}
|
|
|
|
reset() {
|
|
this.groupName.off('keyup', this.updateHandler);
|
|
this.groupPath.off('keydown', this.resetHandler);
|
|
this.groupName.off('blur', this.checkPathHandler);
|
|
}
|
|
|
|
updateGroupPathSlug() {
|
|
const slug = this.groupPath.val() || slugify(this.groupName.val());
|
|
if (!slug) return;
|
|
|
|
fetchGroupPathAvailability(slug)
|
|
.then(({ data }) => data)
|
|
.then(data => {
|
|
if (data.exists && data.suggests.length > 0) {
|
|
const suggestedSlug = data.suggests[0];
|
|
this.groupPath.val(suggestedSlug);
|
|
}
|
|
})
|
|
.catch(() => flash(__('An error occurred while checking group path')));
|
|
}
|
|
}
|