From fe7ebe0912bd68aba0f9d91f590584bf7a97d9d1 Mon Sep 17 00:00:00 2001 From: GeorgiyX <34867130+GeorgiyX@users.noreply.github.com> Date: Thu, 25 Nov 2021 05:12:10 +0300 Subject: [PATCH] =?UTF-8?q?LDBR-3.8:=20=D0=A7=D0=B5=D0=BA=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * LDBR-3.8: Работа SW только в DEBUG режиме * LDBR-3.8: Добавить checklist actions, callback'и во вью, шаблон * LDBR-3.8: Добавить обработчики в BoardStor * LDBR-3.8: Добавить crud чеклистов * LDBR-3.8: Реализовать работу чеклистов * LDBR-3.8: Работа SW только в DEBUG режиме * LDBR-3.8: Добавить checklist actions, callback'и во вью, шаблон * LDBR-3.8: Добавить обработчики в BoardStor * LDBR-3.8: Добавить crud чеклистов * LDBR-3.8: Реализовать работу чеклистов * LDBR-3.19: Удалить отладочную печать * LDBR-3.19: Удалить еще отладочную печать * LDBR-3.8: Исправить chlid в экшонах * LDBR-3.8: Исправить еще один широкий объект * LDBR-3.8: Исправить unresolved helper * LDBR-3.8: Исправить баг когда после добавления нового чеклиста после переоткрытия попапа отображалась старая инфа Co-authored-by: DPeshkoff --- src/actions/checklist.js | 146 ++++++++ src/constants/constants.js | 7 + src/index.js | 2 +- ...lineHelper.js => IsEmptyDeadlineHelper.js} | 0 src/modules/Network/Network.js | 86 +++++ src/popups/Card/CardPopUp.hbs | 57 ++- src/popups/Card/CardPopUp.js | 203 ++++++++++- src/popups/Card/CardPopUp.scss | 53 +++ src/stores/BoardStore/BoardStore.js | 342 +++++++++++++++++- src/styles/scss/Common.scss | 220 ++++++----- src/styles/scss/PopUp.scss | 7 + src/views/BoardsView/BoardsView.js | 2 - webpack.config.js | 28 +- 13 files changed, 1045 insertions(+), 108 deletions(-) create mode 100644 src/actions/checklist.js rename src/modules/Helpers/{isEmptyDeadlineHelper.js => IsEmptyDeadlineHelper.js} (100%) create mode 100644 src/popups/Card/CardPopUp.scss diff --git a/src/actions/checklist.js b/src/actions/checklist.js new file mode 100644 index 00000000..b1d68a2b --- /dev/null +++ b/src/actions/checklist.js @@ -0,0 +1,146 @@ +'use strict'; + +// Modules +import Dispatcher from '../modules/Dispatcher/Dispatcher.js'; + +/** + * Константа, содержащая в себе типы действий для checklist'ов и их элементов. + */ +export const CheckListActionTypes = { + CHECKLIST_CREATE: 'checklist/create', + CHECKLIST_EDIT: 'checklist/edit', + CHECKLIST_SAVE: 'checklist/save', + CHECKLIST_DELETE: 'checklist/delete', + CHECKLIST_ITEM_CREATE: 'checklist/item/create', + CHECKLIST_ITEM_EDIT: 'checklist/item/edit', + CHECKLIST_ITEM_SAVE: 'checklist/item/save', + CHECKLIST_ITEM_DELETE: 'checklist/item/delete', + CHECKLIST_ITEM_TOGGLE: 'checklist/item/toggle', +}; + +/** + * Объект, содержащий в себе действия в системе связанные с CheckList. + */ +export const checkListAction = { + + /** + * Создает чеклист + */ + createCheckList() { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_CREATE, + }); + }, + + /** + * Удаляет чеклист по его id + * @param {Number} chlid - id чеклиста + */ + deleteCheckList(chlid) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_DELETE, + data: {chlid}, + }); + }, + + /** + * Переключает заголовок чеклиста в режим редактирования + * @param {Number} chlid - id чеклиста + */ + editCheckList(chlid) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_EDIT, + data: {chlid}, + }); + }, + + /** + * Сохраняет новый заголовок чеклиста по его id + * @param {Number} chlid - id чеклиста + * @param {String} title - название чеклиста + */ + saveCheckList(chlid, title) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_SAVE, + data: { + chlid, + title, + }, + }); + }, + + /** + * Создает элемент чеклиста + * @param {Number} chlid - id чеклиста + */ + createCheckListItem(chlid) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_ITEM_CREATE, + data: {chlid}, + }); + }, + + /** + * Удаляет элемент чеклиста + * @param {Number} chlid - id чеклиста + * @param {Number} chliid - id элемента чеклиста + */ + deleteCheckListItem(chlid, chliid) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_ITEM_DELETE, + data: { + chlid, + chliid, + }, + }); + }, + + /** + * Переключает заголовок элемента чеклиста в режим редактирования + * @param {Number} chlid - id чеклиста + * @param {Number} chliid - id элемента чеклиста + */ + editCheckListItem(chlid, chliid) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_ITEM_EDIT, + data: { + chlid, + chliid, + }, + }); + }, + + /** + * Сохраняет новый заголовок элемента чеклиста + * @param {Number} chlid - id чеклиста + * @param {Number} chliid - id элемента чеклиста + * @param {String} text - название элемента чеклиста + */ + saveChekListItem(chlid, chliid, text) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_ITEM_SAVE, + data: { + chlid, + chliid, + text, + }, + }); + }, + + /** + * Сохраняет новый заголовок чеклиста по его id + * @param {Number} chlid - id чеклиста + * @param {Number} chliid - id элемента чеклиста + * @param {Boolean} status - статус чекбокса + */ + toggleChekListItem(chlid, chliid, status) { + Dispatcher.dispatch({ + actionName: CheckListActionTypes.CHECKLIST_ITEM_TOGGLE, + data: { + chlid, + chliid, + status, + }, + }); + }, +}; diff --git a/src/constants/constants.js b/src/constants/constants.js index b7c1427a..3f42992c 100644 --- a/src/constants/constants.js +++ b/src/constants/constants.js @@ -86,4 +86,11 @@ export const ConstantMessages = { CardListTitleTooShort: 'Название списка карточек слишком короткое', CardListTitleTooLong: 'Название списка карточек слишком длинное', CardListErrorOnServer: 'Не удалось создать список, попробуйте позднее', + + UnsuccessfulRequest: 'Неудачный запрос, попробуйте позднее :]', +}; + +export const CheckLists = { + CheckListDefaultTitle: 'Check List', + CheckListItemDefaultTitle: 'Item', }; diff --git a/src/index.js b/src/index.js index 4abb6120..e66d8bfd 100644 --- a/src/index.js +++ b/src/index.js @@ -22,7 +22,7 @@ import BoardView from './views/BoardView/BoardView.js'; import ProfileView from './views/ProfileView/ProfileView.js'; import {settingsActions} from './actions/settings'; -if ('serviceWorker' in navigator) { +if ('serviceWorker' in navigator && !DEBUG) { window.addEventListener('load', () => { navigator.serviceWorker.register('/sw.js').then((registration) => { console.log('SW registered with scope ', registration.scope); diff --git a/src/modules/Helpers/isEmptyDeadlineHelper.js b/src/modules/Helpers/IsEmptyDeadlineHelper.js similarity index 100% rename from src/modules/Helpers/isEmptyDeadlineHelper.js rename to src/modules/Helpers/IsEmptyDeadlineHelper.js diff --git a/src/modules/Network/Network.js b/src/modules/Network/Network.js index 50336d4b..4673bac4 100644 --- a/src/modules/Network/Network.js +++ b/src/modules/Network/Network.js @@ -20,6 +20,8 @@ class Network { board: 'api/boards', card: 'api/cards', cardlist: 'api/cardLists', + checklists: 'api/checkLists', + checklistsItems: 'api/checkListItems', }; this._defaultOptions = { @@ -356,6 +358,90 @@ class Network { `http://${this.BackendUrl}:${this.BackendPort}/${this._endpoints.sessions}`, options); } + + /** + * Метод, реализующий запрос POST /api/checkLists. + * @param {object} data полезная нагрузка запроса + * @return {Promise} промис запроса + */ + async createCheckList(data) { + const options = { + method: 'post', + body: JSON.stringify(data), + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklists}`, options); + } + + /** + * Метод, реализующий запрос DELETE /api/checkLists/:chlid + * @param {Number} chlid - id чеклиста + * @return {Promise} промис запроса + */ + async deleteCheckList(chlid) { + const options = { + method: 'delete', + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklists}/${chlid}`, options); + } + + /** + * Метод, реализующий запрос PUT /api/checkLists/:chlid + * @param {object} data полезная нагрузка запроса + * @param {Number} chlid - id чеклиста + * @return {Promise} промис запроса + */ + async updateCheckList(data, chlid) { + const options = { + method: 'put', + body: JSON.stringify(data), + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklists}/${chlid}`, options); + } + + /** + * Метод, реализующий запрос POST /api/checkListItems. + * @param {object} data полезная нагрузка запроса + * @return {Promise} промис запроса + */ + async createCheckListItem(data) { + const options = { + method: 'post', + body: JSON.stringify(data), + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklistsItems}`, options); + } + + /** + * Метод, реализующий запрос PUT /api/checkListItems/:chliid + * @param {object} data полезная нагрузка запроса + * @param {Number} chliid - id элемента чеклиста + * @return {Promise} промис запроса + */ + async updateCheckListItem(data, chliid) { + const options = { + method: 'put', + body: JSON.stringify(data), + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklistsItems}/${chliid}`, options); + } + + /** + * Метод, реализующий запрос DELETE /api/checkListItems/:chliid + * @param {Number} chliid - id элемента чеклиста + * @return {Promise} промис запроса + */ + async deleteCheckListItem(chliid) { + const options = { + method: 'delete', + }; + return this.httpRequest(`http://${this.BackendUrl}:${this.BackendPort}` + + `/${this._endpoints.checklistsItems}/${chliid}`, options); + } } export default new Network(); diff --git a/src/popups/Card/CardPopUp.hbs b/src/popups/Card/CardPopUp.hbs index ce6f7892..20c68aa5 100644 --- a/src/popups/Card/CardPopUp.hbs +++ b/src/popups/Card/CardPopUp.hbs @@ -1,8 +1,8 @@ {{#with card-popup}} {{#if visible }}