/**
* Функции для изменения текущего состояния user
* @module StateConfigAction
* @author Ihor Bielchenko
*/
import Base from '../Base.js';
/**
* Обновление текущего состояния
* @param {Object} user
* @param {Function} callback
* @return {Function}
*/
export function update(user, callback = () => {}) {
return (dispatch) => {
dispatch({
type: 'UPDATE_USER',
payload: user
});
callback();
}
}
/**
* Обновление группы
* @param {Object} user
* @param {Object} id Идентификатор группы
* @param {Object} params
* @param {Function} callback
* @return {Function}
*/
export function updateGroup(user, id, params = {}, callback = () => {}) {
return (dispatch) => {
var i,
group;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === id) {
user.groups[i] = Object.assign(user.groups[i], params);
group = user.groups[i];
break;
}
}
Base.serverSEND(JSON.stringify({
action: 'teacher/group/edit',
properties: {
group_id: group.id,
name: params.name
}
}), (r) => {
if(r.success === 1) {
dispatch({
type: 'UPDATE_USER_GROUP',
payload: user
});
callback(r);
}
});
}
}
/**
* Удаление группы
* @param {Object} user
* @param {Number} id Идентификатор группы
* @param {Function} callback
* @return {Function}
*/
export function removeGroup(user, id, callback = () => {}) {
return (dispatch) => {
var i,
id = 0;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === id) {
if(user.groups[i].id === user.current_group) {
user.current_group = 0;
}
id = user.groups[i].id;
user.groups.splice(i, 1);
break;
}
}
Base.serverSEND(JSON.stringify({
action: 'teacher/group/remove',
properties: {
group_id: id
}
}), (r) => {
if(r.success === true) {
dispatch({
type: 'REMOVE_USER_GROUP',
payload: user
});
callback(r);
}
});
}
}
/**
* Добаить группу
* @param {Object} user
* @param {Object} params Параметры группы
* @param {Function} callback
* @return {Function}
*/
export function addGroup(user, params = {}, callback = () => {}) {
return (dispatch) => {
user.groups.push({
id: Date.now(),
name: params.name,
students: [],
lessons: []
});
Base.serverSEND(JSON.stringify({
action: 'teacher/group/add',
properties: {
name: params.name
}
}), (r) => {
dispatch({
type: 'CREATE_USER_GROUP',
payload: user
});
callback();
});
}
}
/**
* Обновление настроек соц сетей пользователя
* @param {Object} user
* @param {Object} params
* @param {Function} callback
* @return {Function}
*/
export function updateSocials(user, params = {}, callback = () => {}) {
return (dispatch) => {
user = Object.assign(user, params);
dispatch({
type: 'UPDATE_USER_SOCIALS',
payload: user
});
callback();
}
}
/**
* Добавление урока
* @param {Object} user
* @param {Object} params
* @param {Function} callback
* @return {Function}
*/
export function addLessonFirst(user, params = {}, callback = () => {}) {
return (dispatch) => {
var group,
i;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
}
}
group.lessons.push({
id: 0,
name: '',
theme: '',
class_name: params.class_name,
group_id: params.group_id,
days: params.days,
learn_word_repeat: 1,
write_word_repeat: 1,
find_word_repeat: 1,
snake_repeat: 1,
scrabble_repeat: 1,
done_time: '13 октября 2017г.',
data: params.data
});
dispatch({
type: 'ADD_GROUP_LESSONS',
payload: user
});
callback();
}
}
/**
* Создание урока и отправка в базу
* @param {Object} user
* @param {Object} params
* @param {Function} callback
* @return {Function}
*/
export function create(user, assignParams = {}, queryParams = {}, callback = () => {}) {
return (dispatch) => {
var group,
i;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
break;
}
}
let lessons = group.lessons;
let item = lessons[lessons.length - 1];
Base.serverSEND(JSON.stringify({
action: 'teacher/lessons/add',
properties: Object.assign(queryParams, {
group_id: group.id,
days: group.days
})
}), (r) => {
if(r.success === 1) {
item.id = Date.now();
item = Object.assign(item, assignParams);
dispatch({
type: 'CREATE_GROUP_LESSONS',
payload: user
});
callback(r);
}
});
}
}
/**
* Изменение параметра remove у пользователя
* @param {Object} user
* @param {Number} index Индекс пользователя
* @param {Function} callback
* @return {Function}
*/
export function prepareDeleteUser(user, index, callback = () => {}) {
return (dispatch) => {
var group,
i;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
}
}
group.students[index].remove = 1;
dispatch({
type: 'DELETE_USER_FROM_GROUP',
payload: user
});
callback();
}
};
/**
* Удаление пользователя из текущей группы
* @param {Number} index Индекс пользователя
* @param {Function} callback
* @return {Function}
*/
export function deleteUser(user, callback = () => {}) {
return (dispatch) => {
var group,
i,
ids = [],
clear = [];
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
break;
}
}
for(i = 0; i < group.students.length; i++) {
if(group.students[i].remove === 1) {
ids.push(group.students[i].id);
delete group.students[i];
}
}
for(i in group.students) {
clear.push(group.students[i]);
}
group.students = clear;
Base.serverSEND(JSON.stringify({
action: "teacher/students/delete",
properties: {
group_id: group.id,
users: ids
}
}), (r) => {
if(r.success === 1) {
dispatch({
type: 'DELETE_USER_FROM_GROUP',
payload: user
});
callback(r);
}
});
}
};
/**
* Удаление урока
* @param {Number} index Индекс урока
* @param {Function} callback
* @return {Function}
*/
export function removeTask(user, index, callback = () => {}) {
return (dispatch) => {
var group,
i;
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
break;
}
}
group.lessons[index].remove = 1;
dispatch({
type: 'DELETE_USER_LESSON',
payload: user
});
callback();
}
};
/**
* Удаление уроков из базы
* @param {Number} index Индекс урока
* @param {Function} callback
* @return {Function}
*/
export function configmRemoveTasks(user, callback = () => {}) {
return (dispatch) => {
var group,
i,
ids = [],
clear = [];
for(i = 0; i < user.groups.length; i++) {
if(user.groups[i].id === user.current_group) {
group = user.groups[i];
break;
}
}
for(i = 0; i < group.lessons.length; i++) {
if(group.lessons[i].remove === 1) {
ids.push(group.lessons[i].id);
delete group.lessons[i];
}
}
for(i in group.lessons) {
clear.push(group.lessons[i]);
}
group.lessons = clear;
Base.serverSEND(JSON.stringify({
action: 'teacher/lessons/remove',
properties: {
group_id: group.id,
lessons: ids
}
}), () => {
dispatch({
type: 'DELETE_USER_LESSON',
payload: user
});
callback();
});
}
};
/**
* Обновление параметров профиля
* @param {Object} user
* @param {Object} assignParams Параметры, которые нужно обновить в состоянии
* @param {Object} queryParams Параметры, которые нужно отправить на сервер
* @param {Function} callback
* @return {Function}
*/
export function updateProfile(user, assignParams = {}, queryParams = {}, callback = () => {}) {
return (dispatch) => {
user = Object.assign(user, assignParams);
Base.serverSEND(JSON.stringify({
action: 'teacher/profile/edit',
properties: queryParams
}), (r) => {
if(r.success === 1) {
dispatch({
type: 'PROFILE_USER_UPDATE',
payload: user
});
callback(r);
}
});
}
};