diff --git a/package.json b/package.json index 3895bdd..52a3407 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "dev": "webpack-dev-server", "docs": "rm -rf out && documentation build src/** -f html -o out", "show:docs": "lite-server --baseDir=\"out\"", - "lint": "eslint -c .eslintrc.json src --fix", + "prune": "ts-prune -p jsconfig.json", + "eslint": "eslint -c .eslintrc.json src --fix", + "lint": "npm run eslint && npm run prune", "test": "jest", "master:test": "git fetch && git reset --hard master && git checkout master && git pull && npm i && npm start" }, @@ -49,6 +51,7 @@ "postcss-import": "^12.0.1", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", + "ts-prune": "^0.7.4", "url-loader": "^4.1.0", "webpack": "^4.43.0", "webpack-cli": "^3.3.12", diff --git a/src/api/HttpAPI.js b/src/api/HttpAPI.js index cc813b5..1653883 100644 --- a/src/api/HttpAPI.js +++ b/src/api/HttpAPI.js @@ -1,5 +1,5 @@ -import {makeUrlWithQuery} from '../utils/urlUtils'; import httpAuthApi from './HttpAuthAPI'; +import {makeUrlWithQuery} from '../core/utils'; const GET = 'GET'; const POST = 'POST'; diff --git a/src/api/ProfileServiceAPI.js b/src/api/ProfileServiceAPI.js new file mode 100644 index 0000000..2e7fbd3 --- /dev/null +++ b/src/api/ProfileServiceAPI.js @@ -0,0 +1,20 @@ +import http from './HttpAPI'; + +const ROOT_URL = 'http://api.auth.vigdorov.ru/users'; + +const profileServiceApi = { + getSelfInfo: async () => { + const {data} = await http.get(`${ROOT_URL}/me`); + return data; + }, + editSelfInfo: async (user) => { + const {data} = await http.post(`${ROOT_URL}/edit-me`, user); + return data; + }, + changePassword: async (old_password, new_password) => { + const {data} = await http.post(`${ROOT_URL}/change-password`, {old_password, new_password}); + return data; + }, +}; + +export default profileServiceApi; diff --git a/src/api/StorageListAPI.js b/src/api/StorageListAPI.js deleted file mode 100644 index 5226f36..0000000 --- a/src/api/StorageListAPI.js +++ /dev/null @@ -1,126 +0,0 @@ -import {v4 as uuidv4} from 'uuid'; - -import storageApi from './StorageServiceAPI'; - -/** - * @interface StoreListElement - * @type {Object} - * @property {string} _id - уникальный id элемента - */ - -/** - * Класс создания api для списков данных - * @class StorageListApi - * @param {string} key - уникальный ключ для api, который будет записан в сервисе - * @param {string} description - описание api - * @param {string} author - автор api - * @param {string} service_name - имя сервиса, для которого используется api - */ -class StorageListApi { - constructor (key, description, author, service_name) { - /** - * Ключ api - * @type {string} - */ - this.key = key; - /** - * @type {StorageServiceApi} - */ - this.api = storageApi; - this.api.create({key, description, author, service_name, value: []}); - /** - * @type {Object} - * @property {string} description - описание api - * @property {string} author - автор api - * @property {string} service_name - имя сервиса, для которого используется api - */ - this.metaInfo = { - description, author, service_name - }; - } - - /** - * @param {StoreListElement[]} list - список элементов по которым осуществялется поиск - * @param {string} _id - _id искомого элемента - * @returns {number} - Возвращает индекс искомого эллемента по _id - */ - _findIndex = (list, _id) => { - return list.findIndex((item) => item._id === _id); - } - - /** - * @param {StoreListElement[]} list - новый список элементов - * @returns {Promise} - возвращает обновленный список элементов - */ - _updateList = async (list) => { - return await this.api.update(this.key, list); - } - - /** - * @returns {Promise} - возвращает все элементы списка - */ - request = async () => { - const data = await this.api.find(this.key); - return (data && data.value) || []; - } - - /** - * @param {string} _id - _id искомого элемента списка - * @returns {Promise} - возвращает элемент списка или генерит ошибку - */ - find = async (_id) => { - const list = await this.request(); - const findIndex = this._findIndex(list, _id); - if (findIndex === -1) { - throw new Error(`Not Found _id: ${_id}`); - } - return list[findIndex]; - } - - /** - * @param {Object} data - элемент списка - * @returns {Promise} - Возвращает вновь созданный элемент с уникальным полем _id - */ - create = async (data) => { - const list = await this.request(); - const _id = uuidv4(); - const newData = { - ...data, - _id, - }; - await this._updateList(list.concat(newData)); - return newData; - } - - /** - * @param {StoreListElement} data - элемент списка - * @returns {Promise} - Возвращает обновленный элемент списка - */ - update = async (data) => { - const list = await this.request(); - const findIndex = this._findIndex(list, data._id); - if (findIndex === -1) { - throw new Error(`Not Found _id: ${data._id}`); - } - list.splice(findIndex, 1, data); - await this._updateList(list); - return data; - } - - /** - * @param {string} _id - _id удаляемого элемента - * @returns {Promise} - Возвращает _id удаленного элемента или ошибку - */ - remove = async (_id) => { - const list = await this.request(); - const findIndex = this._findIndex(list, _id); - if (findIndex === -1) { - throw new Error(`Not Found _id: ${_id}`); - } - list.splice(findIndex, 1); - await this._updateList(list); - return _id; - } -} - -export default StorageListApi; diff --git a/src/api/consts.js b/src/api/consts.js index e42a6bd..aa8136d 100644 --- a/src/api/consts.js +++ b/src/api/consts.js @@ -6,6 +6,8 @@ export const API_NAMES = { export const LOCALHOST = 'localhost'; +export const API_NAME_HEADER = 'api-name'; + export const API_OPTIONS = { [API_NAMES.PRODUCTION]: { url: 'http://api.storage.vigdorov.ru', @@ -31,10 +33,6 @@ export const ENDPOINTS = { SERVER_LOGS: '/logs/server', }; -export const TESTING_HEADERS = { - 'Api-Name': 'store-service-test', -}; - export const AUTH_SERVICE = 'http://api.auth.vigdorov.ru'; export const AUTH_ENDPOINTS = { diff --git a/src/app.js b/src/app.js index 9b1dcf9..1ea858c 100644 --- a/src/app.js +++ b/src/app.js @@ -3,18 +3,18 @@ import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap'; import './services/AdminConfigsService'; -import ApiPage from './components/api-page'; -import MainPage from './components/main-page'; -import MainMenu from './components/main-menu/MainMenu'; +import ApiPage from './pages/storages/components/page/Page'; +import MainPage from './pages/main/components/page/Page'; +import MainMenu from './core/components/main-menu/MainMenu'; import routeService from './services/RouteService'; -import RouterPagesContainer from './components/router-pages-container/index'; -import LogsPage from './components/logs-page/index'; -import LoginPage from './components/login-page'; -import ProfilePage from './components/profile-page'; +import RouterPagesContainer from './core/components/router-pages-container/RouterPagesContainer'; +import LogsPage from './pages/logs/components/page/Page'; +import LoginPage from './pages/login/components/page/Page'; +import ProfilePage from './pages/profile/components/page/Page'; import authServiceApi from './api/AuthServiceAPI'; import userInfoService from './services/UserInfoService'; -import {EVENTS} from './consts'; -import UsersPage from './components/users-page'; +import {EVENTS, ROUTES} from './core/consts'; +import UsersPage from './pages/users/components/page/Page'; const initAppComponents = () => { const mainMenu = new MainMenu(); @@ -34,12 +34,12 @@ const initAppComponents = () => { * ]); */ routerPagesContainer.addRoutes([ - {url: '/', pageComponent: MainPage}, - {url: '/api', pageComponent: ApiPage}, - {url: '/logs', pageComponent: LogsPage}, - {url: '/users', pageComponent: UsersPage}, - {url: '/login', pageComponent: LoginPage}, - {url: '/profile', pageComponent: ProfilePage}, + {url: ROUTES.MAIN, pageComponent: MainPage}, + {url: ROUTES.STORE, pageComponent: ApiPage}, + {url: ROUTES.LOGS, pageComponent: LogsPage}, + {url: ROUTES.USERS, pageComponent: UsersPage}, + {url: ROUTES.LOGIN, pageComponent: LoginPage}, + {url: ROUTES.PROFILE, pageComponent: ProfilePage}, ]); /** @@ -58,7 +58,7 @@ const initApp = () => { initAppComponents(); }) .catch(() => { - history.pushState({}, '', '/login'); + history.pushState({}, '', ROUTES.LOGIN); initAppComponents(); }); }; diff --git a/src/components/api-info-component/index.js b/src/components/api-info-component/index.js deleted file mode 100644 index 2fda174..0000000 --- a/src/components/api-info-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ApiInfoComponent from './ApiInfoComponent'; - -export default ApiInfoComponent; diff --git a/src/components/api-page/index.js b/src/components/api-page/index.js deleted file mode 100644 index 1de3045..0000000 --- a/src/components/api-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ApiPage from './ApiPage'; - -export default ApiPage; diff --git a/src/components/button-component/index.js b/src/components/button-component/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/client-logs-table/index.js b/src/components/client-logs-table/index.js deleted file mode 100644 index 16a38cd..0000000 --- a/src/components/client-logs-table/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ClientLogsTable from './ClientLogsTable'; - -export default ClientLogsTable; diff --git a/src/components/client-logs-view-form/index.js b/src/components/client-logs-view-form/index.js deleted file mode 100644 index a615ba0..0000000 --- a/src/components/client-logs-view-form/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ClientLogsViewForm from './ClientLogsViewForm'; - -export default ClientLogsViewForm; diff --git a/src/components/component/index.js b/src/components/component/index.js deleted file mode 100644 index bf109b8..0000000 --- a/src/components/component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Component from './Component'; - -export default Component; diff --git a/src/components/create-api-component/index.js b/src/components/create-api-component/index.js deleted file mode 100644 index 7d32818..0000000 --- a/src/components/create-api-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import CreateApiComponent from './CreateApiComponent'; - -export default CreateApiComponent; diff --git a/src/components/filter-input-component/index.js b/src/components/filter-input-component/index.js deleted file mode 100644 index 4e29225..0000000 --- a/src/components/filter-input-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import FilterInputComponent from './FilterInputComponent'; - -export default FilterInputComponent; diff --git a/src/components/form-control/index.js b/src/components/form-control/index.js deleted file mode 100644 index 71c41f0..0000000 --- a/src/components/form-control/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import FormControl from './FormControl'; - -export default FormControl; diff --git a/src/components/headers-table/index.js b/src/components/headers-table/index.js deleted file mode 100644 index 42bae31..0000000 --- a/src/components/headers-table/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import HeadersTable from './HeadersTable'; - -export default HeadersTable; diff --git a/src/components/login-form/index.js b/src/components/login-form/index.js deleted file mode 100644 index e9607b6..0000000 --- a/src/components/login-form/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import LoginForm from './LoginForm'; - -export default LoginForm; diff --git a/src/components/login-page/index.js b/src/components/login-page/index.js deleted file mode 100644 index 6c9595d..0000000 --- a/src/components/login-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import LoginPage from './LoginPage'; - -export default LoginPage; diff --git a/src/components/logs-filters/index.js b/src/components/logs-filters/index.js deleted file mode 100644 index 02d0ce9..0000000 --- a/src/components/logs-filters/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import LogsFilters from './LogsFilters'; - -export default LogsFilters; diff --git a/src/components/logs-page/index.js b/src/components/logs-page/index.js deleted file mode 100644 index a3f4186..0000000 --- a/src/components/logs-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import LogsPage from './LogsPage'; - -export default LogsPage; diff --git a/src/components/main-menu/index.js b/src/components/main-menu/index.js deleted file mode 100644 index 59c85a0..0000000 --- a/src/components/main-menu/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import MainMenu from './MainMenu'; - -export default MainMenu; diff --git a/src/components/main-page/index.js b/src/components/main-page/index.js deleted file mode 100644 index 3634ebe..0000000 --- a/src/components/main-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import MainPage from './MainPage'; - -export default MainPage; diff --git a/src/components/main-statistic/index.js b/src/components/main-statistic/index.js deleted file mode 100644 index 55a1732..0000000 --- a/src/components/main-statistic/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import MainStatistic from './MainStatistic'; - -export default MainStatistic; diff --git a/src/components/modal-sidebar/index.js b/src/components/modal-sidebar/index.js deleted file mode 100644 index fe63c5e..0000000 --- a/src/components/modal-sidebar/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ModalSidebar from './ModalSibebar'; - -export default ModalSidebar; diff --git a/src/components/modal/index.js b/src/components/modal/index.js deleted file mode 100644 index 8144af5..0000000 --- a/src/components/modal/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Modal from './Modal'; - -export default Modal; diff --git a/src/components/not-found-content/index.js b/src/components/not-found-content/index.js deleted file mode 100644 index 5d71828..0000000 --- a/src/components/not-found-content/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import NotFoundContent from './NotFoundContent'; - -export default NotFoundContent; diff --git a/src/components/not-found-page/index.js b/src/components/not-found-page/index.js deleted file mode 100644 index a4684e2..0000000 --- a/src/components/not-found-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import NotFoundPage from './NotFoundPage'; - -export default NotFoundPage; diff --git a/src/components/notify-container/index.js b/src/components/notify-container/index.js deleted file mode 100644 index 0052ed0..0000000 --- a/src/components/notify-container/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import NotifyContainer from './NotifyContainer'; - -export default NotifyContainer; diff --git a/src/components/notify-message/index.js b/src/components/notify-message/index.js deleted file mode 100644 index 93978ce..0000000 --- a/src/components/notify-message/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import NotifyMessage from './NotifyMessage'; - -export default NotifyMessage; diff --git a/src/components/pagination/index.js b/src/components/pagination/index.js deleted file mode 100644 index 9ed530b..0000000 --- a/src/components/pagination/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Pagination from './Pagination'; - -export default Pagination; diff --git a/src/components/profile-content/index.js b/src/components/profile-content/index.js deleted file mode 100644 index e152c26..0000000 --- a/src/components/profile-content/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ProfileContent from './ProfileContent'; - -export default ProfileContent; diff --git a/src/components/profile-page/index.js b/src/components/profile-page/index.js deleted file mode 100644 index 551046e..0000000 --- a/src/components/profile-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ProfilePage from './ProfilePage'; - -export default ProfilePage; diff --git a/src/components/router-pages-container/index.js b/src/components/router-pages-container/index.js deleted file mode 100644 index 9708cf6..0000000 --- a/src/components/router-pages-container/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import RouterPagesContainer from './RouterPagesContainer'; - -export default RouterPagesContainer; diff --git a/src/components/search-component/index.js b/src/components/search-component/index.js deleted file mode 100644 index 84378d4..0000000 --- a/src/components/search-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import FilterApiComponent from './FilterApiComponent'; - -export default FilterApiComponent; diff --git a/src/components/server-logs-table/index.js b/src/components/server-logs-table/index.js deleted file mode 100644 index 48a8594..0000000 --- a/src/components/server-logs-table/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ServerLogsTable from './ServerLogsTable'; - -export default ServerLogsTable; diff --git a/src/components/server-logs-view-form/index.js b/src/components/server-logs-view-form/index.js deleted file mode 100644 index e979112..0000000 --- a/src/components/server-logs-view-form/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ServerLogsViewForm from './ServerLogsViewForm'; - -export default ServerLogsViewForm; diff --git a/src/components/table-cell-overflow/index.js b/src/components/table-cell-overflow/index.js deleted file mode 100644 index 4fba56a..0000000 --- a/src/components/table-cell-overflow/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import TableCellOverflow from './TableCellOverflow'; - -export default TableCellOverflow; diff --git a/src/components/table-column-component/TableColumnComponent.js b/src/components/table-column-component/TableColumnComponent.js deleted file mode 100644 index 7b23d47..0000000 --- a/src/components/table-column-component/TableColumnComponent.js +++ /dev/null @@ -1,23 +0,0 @@ -import Component from '../component/index'; - -class TableColumnComponent extends Component { - constructor (tableHeadRow, text) { - super('#table-column', tableHeadRow); - - this.row = this.mainNode; - this.columnName = { - key: 'Название хранилища', - description: 'Описание', - service_name: 'Имя сервиса', - author: 'Автор', - value: 'Тип содержимого' - }; - this.row.textContent = this.columnName[text]; - - this.addEventListener(this.mainNode, 'click', (evt) => { - this.next('click', evt); - }); - } - -} -export default TableColumnComponent; diff --git a/src/components/table-column-component/index.js b/src/components/table-column-component/index.js deleted file mode 100644 index 860925e..0000000 --- a/src/components/table-column-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import TableColumnComponent from './TableColumnComponent'; - -export default TableColumnComponent; diff --git a/src/components/table-component/TableComponent.js b/src/components/table-component/TableComponent.js deleted file mode 100644 index 657260b..0000000 --- a/src/components/table-component/TableComponent.js +++ /dev/null @@ -1,48 +0,0 @@ -import Component from '../component/index'; -import TableColumnComponent from '../table-column-component/index'; -import TableRowComponent from '../table-row-component/TableRowComponent'; - -class TableComponent extends Component { - constructor (parentNode) { - super('#main-table', parentNode); - - this.tableHead = this.mainNode.querySelector('.Table__head'); - this.tableBody = this.mainNode.querySelector('.Table__body'); - this.tableHeadRow = this.mainNode.querySelector('.Table__head-row'); - this.columnArr = []; - this.rowArr = []; - } - - render = (array) => { - this.columnArr.forEach((item) => { - item.destroy(); - }); - this.rowArr.forEach((item) => { - item.destroy(); - }); - this.array = array; - this.columns = Object.keys(array[0]); - this.columns.forEach((item, index) => { - const columnElement = this.createComponent(TableColumnComponent, this.tableHeadRow, item, index); - columnElement.subscribe('click', () => { - this.sort(item, array); - }); - this.columnArr.push(columnElement); - }); - - this.array.forEach((item, index) => { - const newRow = this.createComponent(TableRowComponent, this.tableBody, item, index); - newRow.subscribe('dblclick', () => { - this.next('showInfo', item); - }); - this.rowArr.push(newRow); - }); - } - - sort = (item, array) => { - this.array.sort((a, b) => a[item] > b[item]); - this.render(array); - } -} - -export default TableComponent; diff --git a/src/components/table-component/index.js b/src/components/table-component/index.js deleted file mode 100644 index fbc54dc..0000000 --- a/src/components/table-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import TableComponent from './TableComponent'; - -export default TableComponent; diff --git a/src/components/table-row-component/TableRowComponent.js b/src/components/table-row-component/TableRowComponent.js deleted file mode 100644 index 1826578..0000000 --- a/src/components/table-row-component/TableRowComponent.js +++ /dev/null @@ -1,31 +0,0 @@ -import Component from '../component/index'; - -class TableRowComponent extends Component { - constructor (container, object, index) { - super('#table-row', container); - - this.row = this.mainNode; - this.indexPlace = this.mainNode.querySelector('.Body__row-index'); - this.content = Object.values(object); - this.indexPlace.textContent = index + 1; - - this.content.forEach((text) => { - const contentPlace = document.createElement('td'); - if (typeof(text) !== 'string') { - contentPlace.textContent = typeof(text); - } else if (text.length > 30) { - contentPlace.textContent = `${text.substr(0, 30)} ...`; - } else { - contentPlace.textContent = text; - } - this.row.appendChild(contentPlace); - }); - - this.addEventListener(this.mainNode, 'dblclick', (evt) => { - this.next('dblclick', evt); - }); - - } - -} -export default TableRowComponent; diff --git a/src/components/table/index.js b/src/components/table/index.js deleted file mode 100644 index de4c7d5..0000000 --- a/src/components/table/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import Table from './Table'; - -export default Table; diff --git a/src/components/user-view-form/index.js b/src/components/user-view-form/index.js deleted file mode 100644 index c06b617..0000000 --- a/src/components/user-view-form/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import UserViewForm from './UserViewForm'; - -export default UserViewForm; diff --git a/src/components/users-page/index.js b/src/components/users-page/index.js deleted file mode 100644 index cebf154..0000000 --- a/src/components/users-page/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import UsersPage from './UsersPage'; - -export default UsersPage; diff --git a/src/components/users-table/index.js b/src/components/users-table/index.js deleted file mode 100644 index d792d66..0000000 --- a/src/components/users-table/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import UsersTable from './UsersTable'; - -export default UsersTable; diff --git a/src/consts.js b/src/consts.js deleted file mode 100644 index 1c87d8d..0000000 --- a/src/consts.js +++ /dev/null @@ -1,98 +0,0 @@ -export const LOG_TYPE = { - SERVER: 'server-logs', - CLIENT: 'client-logs', -}; - -export const LOG_LABELS = [ - {id: LOG_TYPE.SERVER, label: 'Ошибки сервера'}, - {id: LOG_TYPE.CLIENT, label: 'Ошибки запросов'}, -]; - -export const SERVER_COLS = [ - {id: '_id', label: 'id', width: '240px'}, - {id: 'date', label: 'Дата', width: '150px'}, - {id: 'type', label: 'Тип записи', width: '120px'}, - {id: 'message', label: 'Сообщение', width: '200px'}, - {id: 'trace', label: 'Стек', width: '200px'}, -]; - -export const CLIENT_COLS = [ - {id: 'startTime', label: 'Дата запроса', width: '150px'}, - {id: 'type', label: 'Результат', width: '100px'}, - {id: 'data_base', label: 'База данных'}, - {id: 'url', label: 'URL'}, - {id: 'method', label: 'Метод'}, - {id: 'status', label: 'Код ответа'}, - {id: 'message', label: 'Сообщение'}, - {id: 'duration', label: 'Скорость ответа'}, -]; - -export const LOG_COLS = { - [LOG_TYPE.SERVER]: SERVER_COLS, - [LOG_TYPE.CLIENT]: CLIENT_COLS, -}; - -export const USERS_COLS = [ - {id: 'login', label: 'Логин'}, - {id: 'avatar', label: 'Аватар'}, - {id: 'is_admin', label: 'Админ'}, -]; - -export const API_COLS = [ - {id: 'index', label: '#'}, - {id: 'key', label: 'Название хранилища'}, - {id: 'description', label: 'Описание'}, - {id: 'service_name', label: 'Имя сервиса'}, - {id: 'author', label: 'Автор'}, -]; - -export const EVENTS = { - ROUTE_CHANGE: 'routeChange', - ROUTE_SEARCH_CHANGE: 'routeSearchChange', - ROW_CLICK: 'rowClick', - ROW_DOUBLE_CLICK: 'rowDoubleClick', - CHANGE_USER_INFO: 'changeUserInfo', - CHANGE_USER_AVATAR: 'changeUserAvatar', - OPEN_MODAL: 'openModal', - CLICK: 'click', - SUBMIT: 'submit', - FOCUS: 'focus', - KEYDOWN: 'keydown', - INPUT: 'input', - CHANGE: 'change', - CREATE_USER: 'createUser', - SAVE_USER: 'saveUser', - DELETE_USER: 'deleteUser', -}; - -export const FORM_TYPES = { - TEXT: 'TEXT', - SELECT: 'SELECT', - TEXTAREA: 'TEXTAREA', - PASSWORD: 'PASSWORD', -}; - -export const MODES = { - Create: 'create', - View: 'view', - Edit: 'edit', -}; - -export const TAG_NAME = { - OPTION: 'option', - DIV: 'div', - INPUT: 'input', - SELECT: 'select', - TEXTAREA: 'textarea', - LABEL: 'label', -}; - -export const TABLE_TYPE = { - DEFAULT: 'table table-striped table-hover', - BORDERED: 'table table-bordered table-hover', -}; - -export const CAPTION_POSITION = { - TOP: 'caption-top', - BOTH: '', -}; diff --git a/src/utils/__test__/urlUtils.test.js b/src/core/__test__/urlUtils.test.js similarity index 97% rename from src/utils/__test__/urlUtils.test.js rename to src/core/__test__/urlUtils.test.js index d36d5dc..a998af3 100644 --- a/src/utils/__test__/urlUtils.test.js +++ b/src/core/__test__/urlUtils.test.js @@ -1,4 +1,4 @@ -import {makeUrlWithQuery} from '../urlUtils'; +import {makeUrlWithQuery} from '../utils'; describe('Проверка функции makeUrlWithQuery', () => { it('Передача корректного маршрута без query', () => { diff --git a/src/components/button-component/ButtonComponent.js b/src/core/components/button-component/ButtonComponent.js similarity index 57% rename from src/components/button-component/ButtonComponent.js rename to src/core/components/button-component/ButtonComponent.js index 122dad7..e62dd87 100644 --- a/src/components/button-component/ButtonComponent.js +++ b/src/core/components/button-component/ButtonComponent.js @@ -1,4 +1,5 @@ -import Component from '../component/index'; +import Component from '../component/Component'; +import {EVENTS} from '../../consts'; class ButtonComponent extends Component { constructor (parentNode, text, newStyle) { @@ -7,8 +8,8 @@ class ButtonComponent extends Component { this.mainNode.textContent = text; this.mainNode.className = newStyle; - this.addEventListener(this.mainNode, 'click', (event) => { - this.next('click', event); + this.addEventListener(this.mainNode, EVENTS.CLICK, (event) => { + this.next(EVENTS.CLICK, event); }); } } diff --git a/src/components/component/Component.js b/src/core/components/component/Component.js similarity index 97% rename from src/components/component/Component.js rename to src/core/components/component/Component.js index d304948..19bd384 100644 --- a/src/components/component/Component.js +++ b/src/core/components/component/Component.js @@ -1,5 +1,5 @@ -import EmitService from '../../services/EmitService'; -import {createElement} from '../../utils/elementUtils'; +import EmitService from '../../../services/EmitService'; +import {createElement} from '../../utils'; /** * Класс для создания компонентов приложения. Необходим для наследования. diff --git a/src/components/form-control/FormControl.js b/src/core/components/form-control/FormControl.js similarity index 98% rename from src/components/form-control/FormControl.js rename to src/core/components/form-control/FormControl.js index ce4fa7c..ff2b361 100644 --- a/src/components/form-control/FormControl.js +++ b/src/core/components/form-control/FormControl.js @@ -1,4 +1,4 @@ -import Component from '../component'; +import Component from '../component/Component'; import {FORM_TYPES, EVENTS, TAG_NAME} from '../../consts'; class FormControl extends Component { diff --git a/src/components/main-menu/MainMenu.css b/src/core/components/main-menu/MainMenu.css similarity index 100% rename from src/components/main-menu/MainMenu.css rename to src/core/components/main-menu/MainMenu.css diff --git a/src/components/main-menu/MainMenu.js b/src/core/components/main-menu/MainMenu.js similarity index 75% rename from src/components/main-menu/MainMenu.js rename to src/core/components/main-menu/MainMenu.js index 3c9c9c2..cab54d9 100644 --- a/src/components/main-menu/MainMenu.js +++ b/src/core/components/main-menu/MainMenu.js @@ -1,30 +1,30 @@ -import Component from '../component/index'; -import routeService from '../../services/RouteService'; +import Component from '../component/Component'; +import routeService from '../../../services/RouteService'; import './MainMenu.css'; -import {EVENTS} from '../../consts'; -import tokenApi from '../../api/TokenAPI'; +import {EVENTS, ROUTES, TAG_NAME} from '../../consts'; +import tokenApi from '../../../api/TokenAPI'; -export const NAV_MENU = [ +const NAV_MENU = [ { title: 'Главная', - url: '/', + url: ROUTES.MAIN, }, { title: 'Список хранилищ', - url: '/api', + url: ROUTES.STORE, }, { title: 'Журнал', - url: '/logs', + url: ROUTES.LOGS, }, { title: 'Пользователи', - url: '/users', + url: ROUTES.USERS, }, { title: 'Личный кабинет', - url: '/profile', + url: ROUTES.PROFILE, className: 'MainMenu__profileButton' }, ]; @@ -41,14 +41,14 @@ class MainMenu extends Component { this.exitButton = this.mainNode.querySelector('.MainMenu__exitButton'); this.collapse = this.mainNode.querySelector('.navbar-collapse'); - this.addEventListener(this.exitButton, 'click', this.exitApp); + this.addEventListener(this.exitButton, EVENTS.CLICK, this.exitApp); - this.addEventListener(this.logoBox, 'click', () => { - routeService.goTo('/'); + this.addEventListener(this.logoBox, EVENTS.CLICK, () => { + routeService.goTo(ROUTES.MAIN); }); - this.addEventListener(this.avatar, 'click', () => { - routeService.goTo('/profile'); + this.addEventListener(this.avatar, EVENTS.CLICK, () => { + routeService.goTo(ROUTES.PROFILE); }); this.addSubscribe(routeService, EVENTS.ROUTE_CHANGE, (route) => { @@ -74,21 +74,21 @@ class MainMenu extends Component { render = () => { this.menuItems = NAV_MENU.map(({url, title, className = ''}) => { const li = this.createElement({ - tagName: 'li', + tagName: TAG_NAME.LI, parentNode: this.buttonsContainer, options: { className: `nav-item ${className}`, }, }); const link = this.createElement({ - tagName: 'a', + tagName: TAG_NAME.A, parentNode: li, options: { className: 'nav-link', textContent: title, }, }); - this.addEventListener(li, 'click', () => { + this.addEventListener(li, EVENTS.CLICK, () => { routeService.goTo(url); if (this.collapse.classList.contains('show')) { this.collapse.classList.remove('show'); diff --git a/src/components/modal-sidebar/ModalSibebar.js b/src/core/components/modal-sidebar/ModalSibebar.js similarity index 71% rename from src/components/modal-sidebar/ModalSibebar.js rename to src/core/components/modal-sidebar/ModalSibebar.js index c175a80..60edf63 100644 --- a/src/components/modal-sidebar/ModalSibebar.js +++ b/src/core/components/modal-sidebar/ModalSibebar.js @@ -1,10 +1,14 @@ -import Component from '../component'; +import Component from '../component/Component'; import './ModalSidebar.css'; +import {TAG_NAME, EVENTS} from '../../consts'; const SHOW_WINDOW_CLASS = 'ModalSidebar__window_show'; const HIDE_WINDOW_CLASS = 'ModalSidebar__window_hide'; const SHOW_SHADOW_CLASS = 'ModalSidebar__shadow_show'; const HIDE_SHADOW_CLASS = 'ModalSidebar__shadow_hide'; +const SHADOW_CLASS = 'ModalSidebar__shadow'; +const CROSS_BUTTON_CLASS = 'ModalSidebar__close'; +const WINDOW_CLASS = 'ModalSidebar__window'; class ModalSidebar extends Component { constructor ({ @@ -15,28 +19,28 @@ class ModalSidebar extends Component { super('#modal-sidebar', parentNode); this.shadow = this.createElement({ - tagName: 'div', + tagName: TAG_NAME.DIV, parentNode, options: { - className: 'ModalSidebar__shadow', + className: SHADOW_CLASS, }, }); - this.crossButton = this.mainNode.querySelector('.ModalSidebar__close'); + this.crossButton = this.mainNode.querySelector(`.${CROSS_BUTTON_CLASS}`); - this.window = this.mainNode.querySelector('.ModalSidebar__window'); + this.window = this.mainNode.querySelector(`.${WINDOW_CLASS}`); this.window.appendChild(content); if (!disabledShadowClose) { - this.addEventListener(this.mainNode, 'click', (event) => { + this.addEventListener(this.mainNode, EVENTS.CLICK, (event) => { if (event.target === this.mainNode) { this.hide(); } }); } - this.addEventListener(this.crossButton, 'click', this.hide); + this.addEventListener(this.crossButton, EVENTS.CLICK, this.hide); } isOpen = () => { diff --git a/src/components/modal-sidebar/ModalSidebar.css b/src/core/components/modal-sidebar/ModalSidebar.css similarity index 100% rename from src/components/modal-sidebar/ModalSidebar.css rename to src/core/components/modal-sidebar/ModalSidebar.css diff --git a/src/components/modal-sidebar/ModalSidebarAnimation.css b/src/core/components/modal-sidebar/ModalSidebarAnimation.css similarity index 100% rename from src/components/modal-sidebar/ModalSidebarAnimation.css rename to src/core/components/modal-sidebar/ModalSidebarAnimation.css diff --git a/src/components/modal/Modal.css b/src/core/components/modal/Modal.css similarity index 100% rename from src/components/modal/Modal.css rename to src/core/components/modal/Modal.css diff --git a/src/components/modal/Modal.js b/src/core/components/modal/Modal.js similarity index 98% rename from src/components/modal/Modal.js rename to src/core/components/modal/Modal.js index 9fc21a7..259ec73 100644 --- a/src/components/modal/Modal.js +++ b/src/core/components/modal/Modal.js @@ -1,4 +1,4 @@ -import Component from '../component/index'; +import Component from '../component/Component'; import './Modal.css'; diff --git a/src/components/notify-container/NotifyContainer.css b/src/core/components/notify-container/NotifyContainer.css similarity index 100% rename from src/components/notify-container/NotifyContainer.css rename to src/core/components/notify-container/NotifyContainer.css diff --git a/src/components/notify-container/NotifyContainer.js b/src/core/components/notify-container/NotifyContainer.js similarity index 83% rename from src/components/notify-container/NotifyContainer.js rename to src/core/components/notify-container/NotifyContainer.js index b1d3e29..bb7f331 100644 --- a/src/components/notify-container/NotifyContainer.js +++ b/src/core/components/notify-container/NotifyContainer.js @@ -1,4 +1,4 @@ -import Component from '../component'; +import Component from '../component/Component'; import './NotifyContainer.css'; class NotifyContainer extends Component { diff --git a/src/components/notify-message/NotifyMessage.css b/src/core/components/notify-message/NotifyMessage.css similarity index 100% rename from src/components/notify-message/NotifyMessage.css rename to src/core/components/notify-message/NotifyMessage.css diff --git a/src/components/notify-message/NotifyMessage.js b/src/core/components/notify-message/NotifyMessage.js similarity index 80% rename from src/components/notify-message/NotifyMessage.js rename to src/core/components/notify-message/NotifyMessage.js index 86d2c3f..40ddcd6 100644 --- a/src/components/notify-message/NotifyMessage.js +++ b/src/core/components/notify-message/NotifyMessage.js @@ -1,6 +1,7 @@ -import Component from '../component'; -import notifyContainer from '../notify-container'; +import Component from '../component/Component'; +import notifyContainer from '../notify-container/NotifyContainer'; import './NotifyMessage.css'; +import {EVENTS} from '../../consts'; class NotifyMessage extends Component { constructor ({ @@ -29,7 +30,7 @@ class NotifyMessage extends Component { if (autohide) { this.closeButton.remove(); } else { - this.addEventListener(this.closeButton, 'click', () => { + this.addEventListener(this.closeButton, EVENTS.CLICK, () => { this.mainNode.remove(); }); } diff --git a/src/components/pagination/Pagination.js b/src/core/components/pagination/Pagination.js similarity index 92% rename from src/components/pagination/Pagination.js rename to src/core/components/pagination/Pagination.js index baf7de0..693569e 100644 --- a/src/components/pagination/Pagination.js +++ b/src/core/components/pagination/Pagination.js @@ -1,7 +1,7 @@ -import Component from '../component/index'; -import routeService from '../../services/RouteService'; -import {prepareToNumber} from '../../utils/urlUtils'; +import Component from '../component/Component'; +import routeService from '../../../services/RouteService'; import {EVENTS} from '../../consts'; +import {prepareToNumber} from '../../utils'; const LEFT_ICON = '«'; const RIGHT_ICON = '»'; @@ -44,7 +44,7 @@ class Pagination extends Component { if (text === this.currentPage) { li.classList.add('active'); } - this.addEventListener(button, 'click', () => { + this.addEventListener(button, EVENTS.CLICK, () => { const nextPage = (() => { if (text === LEFT_ICON) { return this.currentPage - 1; diff --git a/src/components/router-pages-container/RouterPagesContainer.js b/src/core/components/router-pages-container/RouterPagesContainer.js similarity index 89% rename from src/components/router-pages-container/RouterPagesContainer.js rename to src/core/components/router-pages-container/RouterPagesContainer.js index d08138f..98f9b20 100644 --- a/src/components/router-pages-container/RouterPagesContainer.js +++ b/src/core/components/router-pages-container/RouterPagesContainer.js @@ -1,8 +1,8 @@ -import Component from '../component/index'; -import routeService from '../../services/RouteService'; -import NotFoundPage from '../not-found-page'; +import Component from '../component/Component'; +import routeService from '../../../services/RouteService'; +import NotFoundPage from '../../../pages/not-found/components/page/Page'; -import {EVENTS} from '../../consts'; +import {EVENTS, ROUTES} from '../../consts'; /** * @interface Route @@ -42,7 +42,7 @@ class RouterPagesContainer extends Component { }) || {}; // Показывает или прячет меню в зависимости от роут - if (['/login'].includes(url)) { + if ([ROUTES.LOGIN].includes(url)) { mainMenu.hideMenu(); } else { mainMenu.showMenu(); diff --git a/src/components/table-cell-overflow/TableCellOverflow.css b/src/core/components/table-cell-overflow/TableCellOverflow.css similarity index 100% rename from src/components/table-cell-overflow/TableCellOverflow.css rename to src/core/components/table-cell-overflow/TableCellOverflow.css diff --git a/src/components/table-cell-overflow/TableCellOverflow.js b/src/core/components/table-cell-overflow/TableCellOverflow.js similarity index 78% rename from src/components/table-cell-overflow/TableCellOverflow.js rename to src/core/components/table-cell-overflow/TableCellOverflow.js index c0a8d44..0644c25 100644 --- a/src/components/table-cell-overflow/TableCellOverflow.js +++ b/src/core/components/table-cell-overflow/TableCellOverflow.js @@ -1,24 +1,25 @@ -import Component from '../component'; +import Component from '../component/Component'; import './TableCellOverflow.css'; +import {TAG_NAME} from '../../consts'; class TableCellOverflow extends Component { constructor (parentNode, text) { super(null, parentNode); const cell = this.createElement({ - tagName: 'td', + tagName: TAG_NAME.TD, parentNode: this.mainNode, }); const div = this.createElement({ - tagName: 'div', + tagName: TAG_NAME.DIV, parentNode: cell, options: { className: 'TableCellOverflow__cellWrapper' } }); const span = this.createElement({ - tagName: 'span', + tagName: TAG_NAME.SPAN, parentNode: div, options: { className: 'TableCellOverflow__cell', diff --git a/src/components/table/HeaderCol.js b/src/core/components/table/HeaderCol.js similarity index 85% rename from src/components/table/HeaderCol.js rename to src/core/components/table/HeaderCol.js index 9d5ec60..7618f74 100644 --- a/src/components/table/HeaderCol.js +++ b/src/core/components/table/HeaderCol.js @@ -1,4 +1,4 @@ -import Component from '../component/index'; +import Component from '../component/Component'; class HeaderCol extends Component { constructor (parentNode, col) { diff --git a/src/components/table/RowCol.js b/src/core/components/table/RowCol.js similarity index 70% rename from src/components/table/RowCol.js rename to src/core/components/table/RowCol.js index 5de50e3..6227a56 100644 --- a/src/components/table/RowCol.js +++ b/src/core/components/table/RowCol.js @@ -1,11 +1,12 @@ -import Component from '../component'; +import Component from '../component/Component'; +import {TAG_NAME} from '../../consts'; class RowCol extends Component { constructor (parentNode, text) { super(null, parentNode); this.createElement({ - tagName: 'td', + tagName: TAG_NAME.TD, parentNode: this.mainNode, options: { innerHTML: text, diff --git a/src/components/table/Table.js b/src/core/components/table/Table.js similarity index 98% rename from src/components/table/Table.js rename to src/core/components/table/Table.js index 8e30cd2..74d1c7f 100644 --- a/src/components/table/Table.js +++ b/src/core/components/table/Table.js @@ -1,4 +1,4 @@ -import Component from '../component/index'; +import Component from '../component/Component'; import HeaderCol from './HeaderCol'; import TableRow from './TableRow'; import TableRowWrapper from './TableRowWrapper'; diff --git a/src/components/table/TableRow.js b/src/core/components/table/TableRow.js similarity index 85% rename from src/components/table/TableRow.js rename to src/core/components/table/TableRow.js index 92aee7f..e2a387e 100644 --- a/src/components/table/TableRow.js +++ b/src/core/components/table/TableRow.js @@ -1,4 +1,4 @@ -import Component from '../component/index'; +import Component from '../component/Component'; import RowCol from './RowCol'; class TableRow extends Component { diff --git a/src/components/table/TableRowWrapper.js b/src/core/components/table/TableRowWrapper.js similarity index 62% rename from src/components/table/TableRowWrapper.js rename to src/core/components/table/TableRowWrapper.js index 3cb115f..13ed0fb 100644 --- a/src/components/table/TableRowWrapper.js +++ b/src/core/components/table/TableRowWrapper.js @@ -1,15 +1,15 @@ -import Component from '../component'; +import Component from '../component/Component'; import {EVENTS} from '../../consts'; class TableRowWrapper extends Component { constructor (parentNode) { super('#uni-table-row', parentNode); - this.addEventListener(this.mainNode, 'click', () => { + this.addEventListener(this.mainNode, EVENTS.CLICK, () => { this.next(EVENTS.ROW_CLICK); }); - this.addEventListener(this.mainNode, 'dblclick', () => { + this.addEventListener(this.mainNode, EVENTS.DBL_CLICK, () => { this.next(EVENTS.ROW_DOUBLE_CLICK); }); } diff --git a/src/core/consts.js b/src/core/consts.js new file mode 100644 index 0000000..449bab7 --- /dev/null +++ b/src/core/consts.js @@ -0,0 +1,64 @@ +export const EVENTS = { + ROUTE_CHANGE: 'routeChange', + ROUTE_SEARCH_CHANGE: 'routeSearchChange', + ROW_CLICK: 'rowClick', + ROW_DOUBLE_CLICK: 'rowDoubleClick', + CHANGE_USER_INFO: 'changeUserInfo', + CHANGE_USER_AVATAR: 'changeUserAvatar', + OPEN_MODAL: 'openModal', + CLICK: 'click', + DBL_CLICK: 'dblclick', + SUBMIT: 'submit', + FOCUS: 'focus', + KEYDOWN: 'keydown', + INPUT: 'input', + CHANGE: 'change', + CREATE_USER: 'createUser', + SAVE_USER: 'saveUser', + DELETE_USER: 'deleteUser', +}; + +export const FORM_TYPES = { + TEXT: 'TEXT', + SELECT: 'SELECT', + TEXTAREA: 'TEXTAREA', + PASSWORD: 'PASSWORD', +}; + +export const MODES = { + Create: 'create', + View: 'view', + Edit: 'edit', +}; + +export const TAG_NAME = { + OPTION: 'option', + DIV: 'div', + INPUT: 'input', + SELECT: 'select', + TEXTAREA: 'textarea', + LABEL: 'label', + LI: 'li', + A: 'a', + TD: 'td', + SPAN: 'span', +}; + +export const TABLE_TYPE = { + DEFAULT: 'table table-striped table-hover', + BORDERED: 'table table-bordered table-hover', +}; + +export const CAPTION_POSITION = { + TOP: 'caption-top', + BOTH: '', +}; + +export const ROUTES = { + MAIN: '/', + STORE: '/store', + LOGS: '/logs', + USERS: '/users', + LOGIN: '/login', + PROFILE: '/profile', +}; diff --git a/src/utils/elementUtils.js b/src/core/utils.js similarity index 54% rename from src/utils/elementUtils.js rename to src/core/utils.js index 76084fb..6d5ae16 100644 --- a/src/utils/elementUtils.js +++ b/src/core/utils.js @@ -1,5 +1,35 @@ import moment from 'moment'; import toString from 'lodash/toString'; +import {stringify} from 'querystring'; +import toNumber from 'lodash/toNumber'; +import {API_NAME_HEADER} from '../api/consts'; + +export const makeApiName = (headers) => { + return headers[API_NAME_HEADER] ? 'testing' : 'production'; +}; + +export const makeDurationMessage = (startTime, endTime, format) => { + const duration = moment(endTime, format).millisecond() - moment(startTime, format).millisecond(); + return `${duration} мс`; +}; + +export const prepareClientLogElement = (client) => { + const {request, response} = client; + const {headers, method, url} = request; + const {status, message} = response; + + const data_base = makeApiName(headers); + + return { + ...client, + data_base, + method, + url, + status: status || 500, + message: message || 'Критическая ошибка сервера', + duration: makeDurationMessage(client.startTime, client.endTime), + }; +}; /** * @interface CreateElementProps @@ -59,3 +89,30 @@ export const prepareServerDate = (stringDate) => { export const prepareObjectToString = (object) => { return JSON.stringify(object); }; + +/** + * Из маршрута и объекта query создает строку для url + * @param {string} url - маршрут + * @param {Object} query - объект с данными + */ +export const makeUrlWithQuery = (url = '', query = {}) => { + const stringQuery = stringify(query); + return url + (stringQuery ? `?${stringQuery}` : ''); +}; + +/** + * Преобразует текстовое значение из url'a в номер страницы. Если не получается, то возвращает 1 страницу. + * @param {unknown} number - значение из url'a, которое мы хотим превратить в номер страницы + * @param {number} countPages - общее количество страниц + */ +export const prepareToNumber = (number, countPages) => { + const prepare = toNumber(number); + const prepareNaN = Number.isNaN(prepare) ? 1 : prepare; + if (prepareNaN < 1) { + return 1; + } + if (prepareNaN > countPages) { + return countPages; + } + return prepareNaN; +}; diff --git a/src/components/login-form/LoginForm.js b/src/pages/login/components/login-form/LoginForm.js similarity index 90% rename from src/components/login-form/LoginForm.js rename to src/pages/login/components/login-form/LoginForm.js index 00250f9..99f65de 100644 --- a/src/components/login-form/LoginForm.js +++ b/src/pages/login/components/login-form/LoginForm.js @@ -1,7 +1,7 @@ -import Component from '../component'; -import Image from '../../img/logo.svg'; -import FormControl from '../form-control'; -import {FORM_TYPES} from '../../consts'; +import Component from '../../../../core/components/component/Component'; +import Image from '../../../../img/logo.svg'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES} from '../../../../core/consts'; class LoginForm extends Component { constructor (parentNode) { diff --git a/src/components/login-page/LoginPage.css b/src/pages/login/components/page/Page.css similarity index 100% rename from src/components/login-page/LoginPage.css rename to src/pages/login/components/page/Page.css diff --git a/src/components/login-page/LoginPage.js b/src/pages/login/components/page/Page.js similarity index 59% rename from src/components/login-page/LoginPage.js rename to src/pages/login/components/page/Page.js index 99321f2..34e6c68 100644 --- a/src/components/login-page/LoginPage.js +++ b/src/pages/login/components/page/Page.js @@ -1,9 +1,10 @@ -import Component from '../component/index'; -import './LoginPage.css'; -import LoginForm from '../login-form'; -import authServiceApi from '../../api/AuthServiceAPI'; -import routeService from '../../services/RouteService'; -import notify from '../../services/NotifyService'; +import Component from '../../../../core/components/component/Component'; +import './Page.css'; +import LoginForm from '../login-form/LoginForm'; +import authServiceApi from '../../../../api/AuthServiceAPI'; +import routeService from '../../../../services/RouteService'; +import notify from '../../../../services/NotifyService'; +import {ROUTES, EVENTS} from '../../../../core/consts'; class LoginPage extends Component { constructor (mainNodeSelector, parentNode) { @@ -11,13 +12,13 @@ class LoginPage extends Component { this.form = this.createComponent(LoginForm, this.mainNode); - this.addSubscribe(this.form, 'submit', ({login, password}) => { + this.addSubscribe(this.form, EVENTS.SUBMIT, ({login, password}) => { this.form.disabled(true); authServiceApi.auth(login, password) .then(() => { this.form.disabled(false); notify.success('Вы авторизованы'); - routeService.goTo('/'); + routeService.goTo(ROUTES.MAIN); }) .catch((e) => { const message = e?.response?.data?.message || 'Неизвестная ошибка'; diff --git a/src/api/StorageLogsAPI.js b/src/pages/logs/api/StorageLogsAPI.js similarity index 83% rename from src/api/StorageLogsAPI.js rename to src/pages/logs/api/StorageLogsAPI.js index d5d2048..bb6c421 100644 --- a/src/api/StorageLogsAPI.js +++ b/src/pages/logs/api/StorageLogsAPI.js @@ -1,6 +1,6 @@ -import {ENDPOINTS} from './consts'; -import adminConfigsService from '../services/AdminConfigsService'; -import http from './HttpAPI'; +import {ENDPOINTS} from '../../../api/consts'; +import adminConfigsService from '../../../services/AdminConfigsService'; +import http from '../../../api/HttpAPI'; class StorageLogsApi { constructor () { diff --git a/src/components/client-logs-table/ClientLogsTable.js b/src/pages/logs/components/client-logs-table/ClientLogsTable.js similarity index 86% rename from src/components/client-logs-table/ClientLogsTable.js rename to src/pages/logs/components/client-logs-table/ClientLogsTable.js index a35bceb..3a7f083 100644 --- a/src/components/client-logs-table/ClientLogsTable.js +++ b/src/pages/logs/components/client-logs-table/ClientLogsTable.js @@ -1,6 +1,6 @@ -import Table from '../table'; -import {LOG_COLS, LOG_TYPE} from '../../consts'; +import Table from '../../../../core/components/table/Table'; import ClientLogsTableRow from './ClientLogsTableRow'; +import {LOG_COLS, LOG_TYPE} from '../../consts'; class ClientLogsTable extends Table { constructor () { diff --git a/src/components/client-logs-table/ClientLogsTableRow.js b/src/pages/logs/components/client-logs-table/ClientLogsTableRow.js similarity index 61% rename from src/components/client-logs-table/ClientLogsTableRow.js rename to src/pages/logs/components/client-logs-table/ClientLogsTableRow.js index 3b908c5..0907cd4 100644 --- a/src/components/client-logs-table/ClientLogsTableRow.js +++ b/src/pages/logs/components/client-logs-table/ClientLogsTableRow.js @@ -1,5 +1,5 @@ -import Component from '../component'; -import TableCellOverflow from '../table-cell-overflow'; +import Component from '../../../../core/components/component/Component'; +import TableCellOverflow from '../../../../core/components/table-cell-overflow/TableCellOverflow'; class ClientLogsTableRow extends Component { constructor (parentNode, cols, row) { diff --git a/src/components/client-logs-view-form/ClientLogsViewForm.css b/src/pages/logs/components/client-logs-view-form/ClientLogsViewForm.css similarity index 100% rename from src/components/client-logs-view-form/ClientLogsViewForm.css rename to src/pages/logs/components/client-logs-view-form/ClientLogsViewForm.css diff --git a/src/components/client-logs-view-form/ClientLogsViewForm.js b/src/pages/logs/components/client-logs-view-form/ClientLogsViewForm.js similarity index 91% rename from src/components/client-logs-view-form/ClientLogsViewForm.js rename to src/pages/logs/components/client-logs-view-form/ClientLogsViewForm.js index 9176e72..8771105 100644 --- a/src/components/client-logs-view-form/ClientLogsViewForm.js +++ b/src/pages/logs/components/client-logs-view-form/ClientLogsViewForm.js @@ -1,11 +1,11 @@ -import Component from '../component'; -import FormControl from '../form-control'; -import {FORM_TYPES, TAG_NAME} from '../../consts'; -import ModalSidebar from '../modal-sidebar'; +import Component from '../../../../core/components/component/Component'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES, TAG_NAME} from '../../../../core/consts'; +import ModalSidebar from '../../../../core/components/modal-sidebar/ModalSibebar'; import './ClientLogsViewForm.css'; import {INPUT_IDS, LABELS, CLASSNAMES} from './consts'; -import {makeApiName, makeDurationMessage} from '../../utils/converters'; -import HeadersTable from '../headers-table'; +import HeadersTable from '../headers-table/HeadersTable'; +import {makeDurationMessage, makeApiName} from '../../../../core/utils'; const FORMAT = 'DD/MM/YYYY HH:mm:ss'; diff --git a/src/components/client-logs-view-form/consts.js b/src/pages/logs/components/client-logs-view-form/consts.js similarity index 100% rename from src/components/client-logs-view-form/consts.js rename to src/pages/logs/components/client-logs-view-form/consts.js diff --git a/src/components/headers-table/HeaderTableRow.js b/src/pages/logs/components/headers-table/HeaderTableRow.js similarity index 60% rename from src/components/headers-table/HeaderTableRow.js rename to src/pages/logs/components/headers-table/HeaderTableRow.js index fa6534f..572e333 100644 --- a/src/components/headers-table/HeaderTableRow.js +++ b/src/pages/logs/components/headers-table/HeaderTableRow.js @@ -1,5 +1,5 @@ -import Component from '../component'; -import TableCellOverflow from '../table-cell-overflow'; +import Component from '../../../../core/components/component/Component'; +import TableCellOverflow from '../../../../core/components/table-cell-overflow/TableCellOverflow'; class HeaderTableRow extends Component { constructor (parentNode, cols, row) { diff --git a/src/components/headers-table/HeadersTable.js b/src/pages/logs/components/headers-table/HeadersTable.js similarity index 81% rename from src/components/headers-table/HeadersTable.js rename to src/pages/logs/components/headers-table/HeadersTable.js index bf20f38..a9bce87 100644 --- a/src/components/headers-table/HeadersTable.js +++ b/src/pages/logs/components/headers-table/HeadersTable.js @@ -1,6 +1,6 @@ -import Table from '../table'; +import Table from '../../../../core/components/table/Table'; import HeaderTableRow from './HeaderTableRow'; -import {TABLE_TYPE} from '../../consts'; +import {TABLE_TYPE} from '../../../../core/consts'; const COLUMNS = [ {id: 'header', label: 'Заголовок'}, diff --git a/src/components/logs-filters/LogsFilters.css b/src/pages/logs/components/logs-filters/LogsFilters.css similarity index 100% rename from src/components/logs-filters/LogsFilters.css rename to src/pages/logs/components/logs-filters/LogsFilters.css diff --git a/src/components/logs-filters/LogsFilters.js b/src/pages/logs/components/logs-filters/LogsFilters.js similarity index 96% rename from src/components/logs-filters/LogsFilters.js rename to src/pages/logs/components/logs-filters/LogsFilters.js index ae15fcf..a3e4145 100644 --- a/src/components/logs-filters/LogsFilters.js +++ b/src/pages/logs/components/logs-filters/LogsFilters.js @@ -1,7 +1,7 @@ -import Component from '../component/index'; -import routeService from '../../services/RouteService'; -import {LOG_TYPE, LOG_LABELS} from '../../consts'; +import Component from '../../../../core/components/component/Component'; +import routeService from '../../../../services/RouteService'; import './LogsFilters.css'; +import {LOG_TYPE, LOG_LABELS} from '../../consts'; class LogsFilters extends Component { constructor (parentNode) { diff --git a/src/components/logs-page/LogsPage.js b/src/pages/logs/components/page/Page.js similarity index 85% rename from src/components/logs-page/LogsPage.js rename to src/pages/logs/components/page/Page.js index df37a3e..c70a1a7 100644 --- a/src/components/logs-page/LogsPage.js +++ b/src/pages/logs/components/page/Page.js @@ -1,17 +1,16 @@ import toString from 'lodash/toString'; -import Component from '../component/index'; +import Component from '../../../../core/components/component/Component'; import storageLogsApi from '../../api/StorageLogsAPI'; -import Pagination from '../pagination'; -import LogsFilters from '../logs-filters'; -import routeService from '../../services/RouteService'; -import {prepareToNumber} from '../../utils/urlUtils'; -import {LOG_TYPE, EVENTS} from '../../consts'; -import {markText, prepareServerDate, prepareObjectToString} from '../../utils/elementUtils'; -import ServerLogsTable from '../server-logs-table'; -import ClientLogsTable from '../client-logs-table'; -import ClientLogsViewForm from '../client-logs-view-form'; -import ServerLogsViewForm from '../server-logs-view-form'; -import {prepareClientLogElement} from '../../utils/converters'; +import Pagination from '../../../../core/components/pagination/Pagination'; +import LogsFilters from '../logs-filters/LogsFilters'; +import routeService from '../../../../services/RouteService'; +import {EVENTS} from '../../../../core/consts'; +import ServerLogsTable from '../server-logs-table/ServerLogsTable'; +import ClientLogsTable from '../client-logs-table/ClientLogsTable'; +import ClientLogsViewForm from '../client-logs-view-form/ClientLogsViewForm'; +import ServerLogsViewForm from '../server-logs-view-form/ServerLogsViewForm'; +import {prepareClientLogElement, markText, prepareToNumber, prepareServerDate, prepareObjectToString} from '../../../../core/utils'; +import {LOG_TYPE} from '../../consts'; const ELEMENTS_ON_PAGE = 15; diff --git a/src/components/server-logs-table/ServerLogsTable.js b/src/pages/logs/components/server-logs-table/ServerLogsTable.js similarity index 75% rename from src/components/server-logs-table/ServerLogsTable.js rename to src/pages/logs/components/server-logs-table/ServerLogsTable.js index 48711c4..213f3f3 100644 --- a/src/components/server-logs-table/ServerLogsTable.js +++ b/src/pages/logs/components/server-logs-table/ServerLogsTable.js @@ -1,6 +1,6 @@ -import Table from '../table'; -import {LOG_TYPE, LOG_COLS} from '../../consts'; +import Table from '../../../../core/components/table/Table'; import ServerLogsTableRow from './ServerLogsTableRow'; +import {LOG_COLS, LOG_TYPE} from '../../consts'; class ServerLogsTable extends Table { constructor () { diff --git a/src/components/server-logs-table/ServerLogsTableRow.js b/src/pages/logs/components/server-logs-table/ServerLogsTableRow.js similarity index 61% rename from src/components/server-logs-table/ServerLogsTableRow.js rename to src/pages/logs/components/server-logs-table/ServerLogsTableRow.js index cf4c25f..a0e1b80 100644 --- a/src/components/server-logs-table/ServerLogsTableRow.js +++ b/src/pages/logs/components/server-logs-table/ServerLogsTableRow.js @@ -1,5 +1,5 @@ -import Component from '../component'; -import TableCellOverflow from '../table-cell-overflow'; +import Component from '../../../../core/components/component/Component'; +import TableCellOverflow from '../../../../core/components/table-cell-overflow/TableCellOverflow'; class ServerLogsTableRow extends Component { constructor (parentNode, cols, row) { diff --git a/src/components/server-logs-view-form/ServerLogsViewForm.css b/src/pages/logs/components/server-logs-view-form/ServerLogsViewForm.css similarity index 100% rename from src/components/server-logs-view-form/ServerLogsViewForm.css rename to src/pages/logs/components/server-logs-view-form/ServerLogsViewForm.css diff --git a/src/components/server-logs-view-form/ServerLogsViewForm.js b/src/pages/logs/components/server-logs-view-form/ServerLogsViewForm.js similarity index 87% rename from src/components/server-logs-view-form/ServerLogsViewForm.js rename to src/pages/logs/components/server-logs-view-form/ServerLogsViewForm.js index 053bdaa..fd5c539 100644 --- a/src/components/server-logs-view-form/ServerLogsViewForm.js +++ b/src/pages/logs/components/server-logs-view-form/ServerLogsViewForm.js @@ -1,7 +1,7 @@ -import Component from '../component'; -import ModalSidebar from '../modal-sidebar'; -import FormControl from '../form-control'; -import {FORM_TYPES} from '../../consts'; +import Component from '../../../../core/components/component/Component'; +import ModalSidebar from '../../../../core/components/modal-sidebar/ModalSibebar'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES} from '../../../../core/consts'; import './ServerLogsViewForm.css'; class ServerLogsViewForm extends Component { diff --git a/src/pages/logs/consts.js b/src/pages/logs/consts.js new file mode 100644 index 0000000..9de8234 --- /dev/null +++ b/src/pages/logs/consts.js @@ -0,0 +1,33 @@ +export const LOG_TYPE = { + SERVER: 'server-logs', + CLIENT: 'client-logs', +}; + +export const LOG_LABELS = [ + {id: LOG_TYPE.SERVER, label: 'Ошибки сервера'}, + {id: LOG_TYPE.CLIENT, label: 'Ошибки запросов'}, +]; + +const SERVER_COLS = [ + {id: '_id', label: 'id', width: '240px'}, + {id: 'date', label: 'Дата', width: '150px'}, + {id: 'type', label: 'Тип записи', width: '120px'}, + {id: 'message', label: 'Сообщение', width: '200px'}, + {id: 'trace', label: 'Стек', width: '200px'}, +]; + +const CLIENT_COLS = [ + {id: 'startTime', label: 'Дата запроса', width: '150px'}, + {id: 'type', label: 'Результат', width: '100px'}, + {id: 'data_base', label: 'База данных'}, + {id: 'url', label: 'URL'}, + {id: 'method', label: 'Метод'}, + {id: 'status', label: 'Код ответа'}, + {id: 'message', label: 'Сообщение'}, + {id: 'duration', label: 'Скорость ответа'}, +]; + +export const LOG_COLS = { + [LOG_TYPE.SERVER]: SERVER_COLS, + [LOG_TYPE.CLIENT]: CLIENT_COLS, +}; diff --git a/src/components/main-page/MainPage.js b/src/pages/main/components/page/Page.js similarity index 66% rename from src/components/main-page/MainPage.js rename to src/pages/main/components/page/Page.js index 33a099c..1a73e70 100644 --- a/src/components/main-page/MainPage.js +++ b/src/pages/main/components/page/Page.js @@ -1,5 +1,5 @@ -import Component from '../component/index'; -import MainStatistic from '../main-statistic'; +import Component from '../../../../core/components/component/Component'; +import MainStatistic from '../statistic/Statistic'; class MainPage extends Component { constructor (mainNodeSelector, parentNode) { diff --git a/src/components/main-statistic/MainStatistic.css b/src/pages/main/components/statistic/Statistic.css similarity index 100% rename from src/components/main-statistic/MainStatistic.css rename to src/pages/main/components/statistic/Statistic.css diff --git a/src/components/main-statistic/MainStatistic.js b/src/pages/main/components/statistic/Statistic.js similarity index 86% rename from src/components/main-statistic/MainStatistic.js rename to src/pages/main/components/statistic/Statistic.js index 483c385..c14ffba 100644 --- a/src/components/main-statistic/MainStatistic.js +++ b/src/pages/main/components/statistic/Statistic.js @@ -1,6 +1,6 @@ -import Component from '../component/index'; -import './MainStatistic.css'; -import storageApi from '../../api/StorageServiceAPI'; +import Component from '../../../../core/components/component/Component'; +import './Statistic.css'; +import storageApi from '../../../storages/api/StorageServiceAPI'; class MainStatistic extends Component { constructor (parentNode) { diff --git a/src/components/not-found-content/NotFoundContent.js b/src/pages/not-found/components/not-found-content/NotFoundContent.js similarity index 69% rename from src/components/not-found-content/NotFoundContent.js rename to src/pages/not-found/components/not-found-content/NotFoundContent.js index 2d9fe9b..1278d15 100644 --- a/src/components/not-found-content/NotFoundContent.js +++ b/src/pages/not-found/components/not-found-content/NotFoundContent.js @@ -1,4 +1,4 @@ -import Component from '../component/Component'; +import Component from '../../../../core/components/component/Component'; class NotFoundContent extends Component { constructor (parentNode) { diff --git a/src/components/not-found-page/NotFoundPage.css b/src/pages/not-found/components/page/Page.css similarity index 100% rename from src/components/not-found-page/NotFoundPage.css rename to src/pages/not-found/components/page/Page.css diff --git a/src/components/not-found-page/NotFoundPage.js b/src/pages/not-found/components/page/Page.js similarity index 59% rename from src/components/not-found-page/NotFoundPage.js rename to src/pages/not-found/components/page/Page.js index 6781e72..f284dd3 100644 --- a/src/components/not-found-page/NotFoundPage.js +++ b/src/pages/not-found/components/page/Page.js @@ -1,7 +1,8 @@ -import Component from '../component/index'; -import routeService from '../../services/RouteService'; -import NotFoundContent from '../not-found-content'; -import './NotFoundPage.css'; +import Component from '../../../../core/components/component/Component'; +import routeService from '../../../../services/RouteService'; +import NotFoundContent from '../not-found-content/NotFoundContent'; +import './Page.css'; +import {ROUTES, EVENTS} from '../../../../core/consts'; class NotFoundPage extends Component { constructor (mainNodeSelector, parentNode) { @@ -10,8 +11,8 @@ class NotFoundPage extends Component { this.mainNodeSelector = this.mainNode.querySelector('.NotFound__text'); this.mainNodeSelector.textContent = `Запрашиваемая Вами страница ${location.pathname} не найдена`; this.redirectButton = this.mainNode.querySelector('.NotFound__redirectButton'); - this.addEventListener(this.redirectButton, 'click', () => { - routeService.goTo('/'); + this.addEventListener(this.redirectButton, EVENTS.CLICK, () => { + routeService.goTo(ROUTES.MAIN); }); } } diff --git a/src/components/avatar-modal-component/AvatarModal.css b/src/pages/profile/components/avatar-modal-component/AvatarModal.css similarity index 100% rename from src/components/avatar-modal-component/AvatarModal.css rename to src/pages/profile/components/avatar-modal-component/AvatarModal.css diff --git a/src/components/avatar-modal-component/AvatarModal.js b/src/pages/profile/components/avatar-modal-component/AvatarModal.js similarity index 76% rename from src/components/avatar-modal-component/AvatarModal.js rename to src/pages/profile/components/avatar-modal-component/AvatarModal.js index a03c2c5..bf30028 100644 --- a/src/components/avatar-modal-component/AvatarModal.js +++ b/src/pages/profile/components/avatar-modal-component/AvatarModal.js @@ -1,17 +1,16 @@ -import Modal from '../modal/Modal'; -import {createElement} from '../../utils/elementUtils'; -import FormControl from '../form-control/index'; +import Modal from '../../../../core/components/modal/Modal'; +import FormControl from '../../../../core/components/form-control/FormControl'; import './AvatarModal.css'; -import usersServiceApi from '../../api/UsersServiceAPI'; -import userInfoService from '../../services/UserInfoService'; -import {EVENTS} from '../../consts'; +import userInfoService from '../../../../services/UserInfoService'; +import {EVENTS} from '../../../../core/consts'; +import profileServiceApi from '../../../../api/ProfileServiceAPI'; class AvatarModal extends Modal { constructor (parentNode) { super(parentNode); this.header.textContent = 'Основное изображение'; - this.avatar = createElement({ + this.avatar = this.createElement({ tagName: 'div', options: { className: 'Avatar__img', @@ -28,7 +27,7 @@ class AvatarModal extends Modal { className: 'Avatar__url-input' }); - this.submitBtn = createElement({ + this.submitBtn = this.createElement({ tagName: 'button', options: { className: 'Avatar__submit-btn btn btn-outline-primary' @@ -53,7 +52,7 @@ class AvatarModal extends Modal { } init = async () => { - const user = await usersServiceApi.getSelfInfo(); + const user = await profileServiceApi.getSelfInfo(); this.changeAvatar(this.url || user.avatar); } @@ -63,7 +62,7 @@ class AvatarModal extends Modal { submit = async () => { if (this.url) { - await usersServiceApi.editSelfInfo({avatar: this.url}); + await profileServiceApi.editSelfInfo({avatar: this.url}); userInfoService.setUserLogin(); this.hide(); } else { diff --git a/src/components/profile-page/ProfilePage.css b/src/pages/profile/components/page/Page.css similarity index 81% rename from src/components/profile-page/ProfilePage.css rename to src/pages/profile/components/page/Page.css index 260ceaf..5b18899 100644 --- a/src/components/profile-page/ProfilePage.css +++ b/src/pages/profile/components/page/Page.css @@ -7,5 +7,5 @@ width: 150px; height: 150px; cursor: pointer; - background-image: url('../../img/ava.jpg'); + background-image: url('../../../../img/ava.jpg'); } diff --git a/src/components/profile-page/ProfilePage.js b/src/pages/profile/components/page/Page.js similarity index 63% rename from src/components/profile-page/ProfilePage.js rename to src/pages/profile/components/page/Page.js index f57fac1..d288408 100644 --- a/src/components/profile-page/ProfilePage.js +++ b/src/pages/profile/components/page/Page.js @@ -1,10 +1,10 @@ -import Component from '../component/index'; -import ProfileContent from '../profile-content'; -import './ProfilePage.css'; -import usersServiceApi from '../../api/UsersServiceAPI'; +import Component from '../../../../core/components/component/Component'; +import ProfileContent from '../profile-content/ProfileContent'; +import './Page.css'; import AvatarModal from '../avatar-modal-component/AvatarModal'; -import userInfoService from '../../services/UserInfoService'; -import {EVENTS} from '../../consts'; +import userInfoService from '../../../../services/UserInfoService'; +import {EVENTS} from '../../../../core/consts'; +import profileServiceApi from '../../../../api/ProfileServiceAPI'; class ProfilePage extends Component { constructor (mainNodeSelector, parentNode) { @@ -23,7 +23,7 @@ class ProfilePage extends Component { } init = async () => { - this.user = await usersServiceApi.getSelfInfo(); + this.user = await profileServiceApi.getSelfInfo(); this.form.initProfile(this.user); } } diff --git a/src/components/profile-content/ProfileContent.js b/src/pages/profile/components/profile-content/ProfileContent.js similarity index 89% rename from src/components/profile-content/ProfileContent.js rename to src/pages/profile/components/profile-content/ProfileContent.js index 43e74a7..6530a9c 100644 --- a/src/components/profile-content/ProfileContent.js +++ b/src/pages/profile/components/profile-content/ProfileContent.js @@ -1,9 +1,9 @@ -import Component from '../component/Component'; -import FormControl from '../form-control'; -import {FORM_TYPES, EVENTS} from '../../consts'; +import Component from '../../../../core/components/component/Component'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES, EVENTS} from '../../../../core/consts'; import {INPUT_IDS, LABELS} from './consts'; -import usersServiceApi from '../../api/UsersServiceAPI'; -import notify from '../../services/NotifyService'; +import notify from '../../../../services/NotifyService'; +import profileServiceApi from '../../../../api/ProfileServiceAPI'; class ProfileContent extends Component { constructor (parentNode) { @@ -80,7 +80,7 @@ class ProfileContent extends Component { if (this.validateInputs()) { const oldPassword = this.oldPassword.getValue(); const newPassword = this.newPassword.getValue(); - await usersServiceApi.changePassword(oldPassword, newPassword); + await profileServiceApi.changePassword(oldPassword, newPassword); this.clearForm(); notify.success('Пароль успешно изменен'); } diff --git a/src/components/profile-content/consts.js b/src/pages/profile/components/profile-content/consts.js similarity index 100% rename from src/components/profile-content/consts.js rename to src/pages/profile/components/profile-content/consts.js diff --git a/src/api/StorageServiceAPI.js b/src/pages/storages/api/StorageServiceAPI.js similarity index 93% rename from src/api/StorageServiceAPI.js rename to src/pages/storages/api/StorageServiceAPI.js index a93e168..6ca1db5 100644 --- a/src/api/StorageServiceAPI.js +++ b/src/pages/storages/api/StorageServiceAPI.js @@ -1,6 +1,6 @@ -import {ENDPOINTS} from './consts'; -import adminConfigsService from '../services/AdminConfigsService'; -import http from './HttpAPI'; +import {ENDPOINTS} from '../../../api/consts'; +import adminConfigsService from '../../../services/AdminConfigsService'; +import http from '../../../api/HttpAPI'; /** * @interface Store diff --git a/src/components/api-info-component/ApiInfoComponent.css b/src/pages/storages/components/api-info-component/ApiInfoComponent.css similarity index 100% rename from src/components/api-info-component/ApiInfoComponent.css rename to src/pages/storages/components/api-info-component/ApiInfoComponent.css diff --git a/src/components/api-info-component/ApiInfoComponent.js b/src/pages/storages/components/api-info-component/ApiInfoComponent.js similarity index 94% rename from src/components/api-info-component/ApiInfoComponent.js rename to src/pages/storages/components/api-info-component/ApiInfoComponent.js index b1afba0..565d7c1 100644 --- a/src/components/api-info-component/ApiInfoComponent.js +++ b/src/pages/storages/components/api-info-component/ApiInfoComponent.js @@ -1,6 +1,6 @@ -import Component from '../component/index'; +import Component from '../../../../core/components/component/Component'; import './ApiInfoComponent.css'; -import Modal from '../modal/Modal'; +import Modal from '../../../../core/components/modal/Modal'; import storageApi from '../../api/StorageServiceAPI'; class ApiInfoComponent extends Component { diff --git a/src/components/api-table-component/ApiTableComponent.js b/src/pages/storages/components/api-table-component/ApiTableComponent.js similarity index 86% rename from src/components/api-table-component/ApiTableComponent.js rename to src/pages/storages/components/api-table-component/ApiTableComponent.js index 3e7c644..d3e3dc6 100644 --- a/src/components/api-table-component/ApiTableComponent.js +++ b/src/pages/storages/components/api-table-component/ApiTableComponent.js @@ -1,6 +1,6 @@ -import Table from '../table/Table'; -import {API_COLS} from '../../consts'; +import Table from '../../../../core/components/table/Table'; import ApiTableRowComponent from './ApiTableRowComponent'; +import {API_COLS} from '../../consts'; class ApiTableComponent extends Table { constructor (parentNode) { diff --git a/src/components/api-table-component/ApiTableRowComponent.js b/src/pages/storages/components/api-table-component/ApiTableRowComponent.js similarity index 72% rename from src/components/api-table-component/ApiTableRowComponent.js rename to src/pages/storages/components/api-table-component/ApiTableRowComponent.js index 6ea98b8..b00c3a5 100644 --- a/src/components/api-table-component/ApiTableRowComponent.js +++ b/src/pages/storages/components/api-table-component/ApiTableRowComponent.js @@ -1,5 +1,5 @@ -import Component from '../component/index'; -import TableCellOverflow from '../table-cell-overflow/index'; +import Component from '../../../../core/components/component/Component'; +import TableCellOverflow from '../../../../core/components//table-cell-overflow/TableCellOverflow'; class ApiTableRowComponent extends Component { constructor (parentNode, cols, row, index) { diff --git a/src/components/api-table-view-form/ApiTableViewForm.css b/src/pages/storages/components/api-table-view-form/ApiTableViewForm.css similarity index 100% rename from src/components/api-table-view-form/ApiTableViewForm.css rename to src/pages/storages/components/api-table-view-form/ApiTableViewForm.css diff --git a/src/components/api-table-view-form/ApiTableViewForm.js b/src/pages/storages/components/api-table-view-form/ApiTableViewForm.js similarity index 93% rename from src/components/api-table-view-form/ApiTableViewForm.js rename to src/pages/storages/components/api-table-view-form/ApiTableViewForm.js index 73728d9..d2ea549 100644 --- a/src/components/api-table-view-form/ApiTableViewForm.js +++ b/src/pages/storages/components/api-table-view-form/ApiTableViewForm.js @@ -1,7 +1,7 @@ -import Component from '../component/index'; -import ModalSidebar from '../modal-sidebar/index'; -import FormControl from '../form-control/index'; -import {FORM_TYPES} from '../../consts'; +import Component from '../../../../core/components/component/Component'; +import ModalSidebar from '../../../../core/components/modal-sidebar/ModalSibebar'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES} from '../../../../core/consts'; import './ApiTableViewForm.css'; import storageApi from '../../api/StorageServiceAPI'; diff --git a/src/components/create-api-component/CreateApiComponent.css b/src/pages/storages/components/create-api-component/CreateApiComponent.css similarity index 100% rename from src/components/create-api-component/CreateApiComponent.css rename to src/pages/storages/components/create-api-component/CreateApiComponent.css diff --git a/src/components/create-api-component/CreateApiComponent.js b/src/pages/storages/components/create-api-component/CreateApiComponent.js similarity index 93% rename from src/components/create-api-component/CreateApiComponent.js rename to src/pages/storages/components/create-api-component/CreateApiComponent.js index 0d70bd9..9265aeb 100644 --- a/src/components/create-api-component/CreateApiComponent.js +++ b/src/pages/storages/components/create-api-component/CreateApiComponent.js @@ -1,8 +1,8 @@ -import Component from '../component/index'; -import ButtonComponent from '../button-component/ButtonComponent'; +import Component from '../../../../core/components/component/Component'; +import ButtonComponent from '../../../../core/components/button-component/ButtonComponent'; import './CreateApiComponent.css'; import storageApi from '../../api/StorageServiceAPI'; -import Modal from '../modal/Modal'; +import Modal from '../../../../core/components/modal/Modal'; class CreateApiComponent extends Component { constructor (container) { diff --git a/src/components/search-component/FilterApiComponent.css b/src/pages/storages/components/filter-api-component/FilterApiComponent.css similarity index 100% rename from src/components/search-component/FilterApiComponent.css rename to src/pages/storages/components/filter-api-component/FilterApiComponent.css diff --git a/src/components/search-component/FilterApiComponent.js b/src/pages/storages/components/filter-api-component/FilterApiComponent.js similarity index 69% rename from src/components/search-component/FilterApiComponent.js rename to src/pages/storages/components/filter-api-component/FilterApiComponent.js index c4c37c3..75353e1 100644 --- a/src/components/search-component/FilterApiComponent.js +++ b/src/pages/storages/components/filter-api-component/FilterApiComponent.js @@ -1,9 +1,10 @@ -import Component from '../component/index'; -import ButtonComponent from '../button-component/ButtonComponent'; +import Component from '../../../../core/components/component/Component'; +import ButtonComponent from '../../../../core/components/button-component/ButtonComponent'; import './FilterApiComponent.css'; -import routeService from '../../services/RouteService'; -import {FILTER_ROWS} from './constants'; -import FilterInputComponent from '../filter-input-component/index'; +import routeService from '../../../../services/RouteService'; +import FilterInputComponent from '../filter-input-component/FilterInputComponent'; +import {ROUTES, EVENTS} from '../../../../core/consts'; +import {FILTER_ROWS} from '../../consts'; class FilterApiComponent extends Component { constructor (container) { @@ -24,11 +25,11 @@ class FilterApiComponent extends Component { return input; }); - this.searchBtn.subscribe('click', () => { + this.searchBtn.subscribe(EVENTS.CLICK, () => { this.send(); }); - this.addEventListener(this.form, 'submit', (event) => { + this.addEventListener(this.form, EVENTS.SUBMIT, (event) => { event.preventDefault(); this.send(); }); @@ -43,7 +44,7 @@ class FilterApiComponent extends Component { [name]: element.input.value }; }, {}); - routeService.goTo('/api', query); + routeService.goTo(ROUTES.STORE, query); } } export default FilterApiComponent; diff --git a/src/components/filter-input-component/FilterInputComponent.js b/src/pages/storages/components/filter-input-component/FilterInputComponent.js similarity index 88% rename from src/components/filter-input-component/FilterInputComponent.js rename to src/pages/storages/components/filter-input-component/FilterInputComponent.js index f36ec57..dad837c 100644 --- a/src/components/filter-input-component/FilterInputComponent.js +++ b/src/pages/storages/components/filter-input-component/FilterInputComponent.js @@ -1,4 +1,4 @@ -import Component from '../component/index'; +import Component from '../../../../core/components/component/Component'; class FilterInputComponent extends Component { constructor (container, content) { diff --git a/src/components/api-page/ApiPage.js b/src/pages/storages/components/page/Page.js similarity index 78% rename from src/components/api-page/ApiPage.js rename to src/pages/storages/components/page/Page.js index fa93e13..6234635 100644 --- a/src/components/api-page/ApiPage.js +++ b/src/pages/storages/components/page/Page.js @@ -1,12 +1,12 @@ -import Component from '../component/index'; +import Component from '../../../../core/components/component/Component'; import storageApi from '../../api/StorageServiceAPI'; -import FilterApiComponent from '../search-component/index'; -import ApiInfoComponent from '../api-info-component/index'; -import CreateApiComponent from '../create-api-component/index'; -import ButtonComponent from '../button-component/ButtonComponent'; +import FilterApiComponent from '../filter-api-component/FilterApiComponent'; +import ApiInfoComponent from '../api-info-component/ApiInfoComponent'; +import CreateApiComponent from '../create-api-component/CreateApiComponent'; +import ButtonComponent from '../../../../core/components/button-component/ButtonComponent'; import ApiTableComponent from '../api-table-component/ApiTableComponent'; import ApiTableViewForm from '../api-table-view-form/ApiTableViewForm'; -import {EVENTS} from '../../consts'; +import {EVENTS} from '../../../../core/consts'; class ApiPage extends Component { constructor (mainNodeSelector, parentNode) { diff --git a/src/components/search-component/constants.js b/src/pages/storages/consts.js similarity index 66% rename from src/components/search-component/constants.js rename to src/pages/storages/consts.js index 240f491..d194303 100644 --- a/src/components/search-component/constants.js +++ b/src/pages/storages/consts.js @@ -1,3 +1,11 @@ +export const API_COLS = [ + {id: 'index', label: '#'}, + {id: 'key', label: 'Название хранилища'}, + {id: 'description', label: 'Описание'}, + {id: 'service_name', label: 'Имя сервиса'}, + {id: 'author', label: 'Автор'}, +]; + export const FILTER_ROWS = [ {title: 'Название хранилища', placeholder: 'Введите текст', key: 'key', id: 'filter-api-input-key'}, {title: 'Описание', placeholder: 'Введите текст', key: 'description', id: 'filter-api-input-description'}, diff --git a/src/api/UsersServiceAPI.js b/src/pages/users/api/UsersServiceAPI.js similarity index 83% rename from src/api/UsersServiceAPI.js rename to src/pages/users/api/UsersServiceAPI.js index b8427e7..f863c46 100644 --- a/src/api/UsersServiceAPI.js +++ b/src/pages/users/api/UsersServiceAPI.js @@ -1,4 +1,4 @@ -import http from './HttpAPI'; +import http from '../../../api/HttpAPI'; const ROOT_URL = 'http://api.auth.vigdorov.ru/users'; @@ -31,21 +31,6 @@ class UsersService { return data; } - getSelfInfo = async () => { - const {data} = await http.get(`${ROOT_URL}/me`); - return data; - } - - editSelfInfo = async (user) => { - const {data} = await http.post(`${ROOT_URL}/edit-me`, user); - return data; - } - - changePassword = async (old_password, new_password) => { - const {data} = await http.post(`${ROOT_URL}/change-password`, {old_password, new_password}); - return data; - } - /** * Метод поиска пользователя по Логину * @param {string} login - Логин пользователя diff --git a/src/components/users-page/UsersPage.js b/src/pages/users/components/page/Page.js similarity index 85% rename from src/components/users-page/UsersPage.js rename to src/pages/users/components/page/Page.js index db8d049..9f9fe56 100644 --- a/src/components/users-page/UsersPage.js +++ b/src/pages/users/components/page/Page.js @@ -1,10 +1,10 @@ -import Component from '../component'; -import UsersTable from '../users-table'; +import Component from '../../../../core/components/component/Component'; +import UsersTable from '../users-table/UsersTable'; import usersServiceApi from '../../api/UsersServiceAPI'; -import UserViewForm from '../user-view-form'; -import {EVENTS, MODES} from '../../consts'; -import routeService from '../../services/RouteService'; -import userInfoService from '../../services/UserInfoService'; +import UserViewForm from '../user-view-form/UserViewForm'; +import {EVENTS, MODES} from '../../../../core/consts'; +import routeService from '../../../../services/RouteService'; +import userInfoService from '../../../../services/UserInfoService'; class UsersPage extends Component { constructor (mainNodeSelector, parentNode) { diff --git a/src/components/user-view-form/UserViewForm.js b/src/pages/users/components/user-view-form/UserViewForm.js similarity index 94% rename from src/components/user-view-form/UserViewForm.js rename to src/pages/users/components/user-view-form/UserViewForm.js index 89981d9..9f894c9 100644 --- a/src/components/user-view-form/UserViewForm.js +++ b/src/pages/users/components/user-view-form/UserViewForm.js @@ -1,10 +1,10 @@ -import Component from '../component'; -import ModalSidebar from '../modal-sidebar'; -import FormControl from '../form-control'; -import {FORM_TYPES, EVENTS, MODES} from '../../consts'; -import routeService from '../../services/RouteService'; +import Component from '../../../../core/components/component/Component'; +import ModalSidebar from '../../../../core/components/modal-sidebar/ModalSibebar'; +import FormControl from '../../../../core/components/form-control/FormControl'; +import {FORM_TYPES, EVENTS, MODES} from '../../../../core/consts'; +import routeService from '../../../../services/RouteService'; import usersServiceApi from '../../api/UsersServiceAPI'; -import userInfoService from '../../services/UserInfoService'; +import userInfoService from '../../../../services/UserInfoService'; const TITLE_MODES = { [MODES.Create]: 'Создание пользователя', diff --git a/src/components/users-table/UserAvatarCell.css b/src/pages/users/components/users-table/UserAvatarCell.css similarity index 100% rename from src/components/users-table/UserAvatarCell.css rename to src/pages/users/components/users-table/UserAvatarCell.css diff --git a/src/components/users-table/UserAvatarCell.js b/src/pages/users/components/users-table/UserAvatarCell.js similarity index 88% rename from src/components/users-table/UserAvatarCell.js rename to src/pages/users/components/users-table/UserAvatarCell.js index 6c1e045..6c5ef54 100644 --- a/src/components/users-table/UserAvatarCell.js +++ b/src/pages/users/components/users-table/UserAvatarCell.js @@ -1,4 +1,4 @@ -import Component from '../component'; +import Component from '../../../../core/components/component/Component'; import './UserAvatarCell.css'; class UserAvatarCell extends Component { diff --git a/src/components/users-table/UsersTable.js b/src/pages/users/components/users-table/UsersTable.js similarity index 85% rename from src/components/users-table/UsersTable.js rename to src/pages/users/components/users-table/UsersTable.js index 2682eac..7db42a0 100644 --- a/src/components/users-table/UsersTable.js +++ b/src/pages/users/components/users-table/UsersTable.js @@ -1,6 +1,6 @@ -import Table from '../table'; -import {USERS_COLS} from '../../consts'; +import Table from '../../../../core/components/table/Table'; import UsersTableRow from './UsersTableRow'; +import {USERS_COLS} from '../../consts'; class UsersTable extends Table { constructor (parentNode) { diff --git a/src/components/users-table/UsersTableRow.js b/src/pages/users/components/users-table/UsersTableRow.js similarity index 78% rename from src/components/users-table/UsersTableRow.js rename to src/pages/users/components/users-table/UsersTableRow.js index 3698615..36a29c3 100644 --- a/src/components/users-table/UsersTableRow.js +++ b/src/pages/users/components/users-table/UsersTableRow.js @@ -1,5 +1,5 @@ -import Component from '../component'; -import TableCellOverflow from '../table-cell-overflow'; +import Component from '../../../../core/components/component/Component'; +import TableCellOverflow from '../../../../core/components/table-cell-overflow/TableCellOverflow'; import UserAvatarCell from './UserAvatarCell'; const makeYesOrNo = (value) => { diff --git a/src/pages/users/consts.js b/src/pages/users/consts.js new file mode 100644 index 0000000..8448f99 --- /dev/null +++ b/src/pages/users/consts.js @@ -0,0 +1,5 @@ +export const USERS_COLS = [ + {id: 'login', label: 'Логин'}, + {id: 'avatar', label: 'Аватар'}, + {id: 'is_admin', label: 'Админ'}, +]; diff --git a/src/services/NotifyService.js b/src/services/NotifyService.js index f7f55f9..fceac35 100644 --- a/src/services/NotifyService.js +++ b/src/services/NotifyService.js @@ -1,5 +1,5 @@ import * as bootstrap from 'bootstrap'; -import NotifyMessage from '../components/notify-message'; +import NotifyMessage from '../core/components/notify-message/NotifyMessage'; import InfoIcon from '../img/notify_icon_info.svg'; import WarnIcon from '../img/notify_icon_warn.svg'; import SuccessIcon from '../img/notify_icon_success.svg'; diff --git a/src/services/RouteService.js b/src/services/RouteService.js index 51ce18a..fd4370d 100644 --- a/src/services/RouteService.js +++ b/src/services/RouteService.js @@ -1,7 +1,7 @@ import EmitService from './EmitService'; import {parse} from 'querystring'; -import {makeUrlWithQuery} from '../utils/urlUtils'; -import {EVENTS} from '../consts'; +import {EVENTS} from '../core/consts'; +import {makeUrlWithQuery} from '../core/utils'; /** * @function RouterListener diff --git a/src/services/UserInfoService.js b/src/services/UserInfoService.js index 767c7c7..945aad3 100644 --- a/src/services/UserInfoService.js +++ b/src/services/UserInfoService.js @@ -1,6 +1,6 @@ -import usersServiceApi from '../api/UsersServiceAPI'; -import {EVENTS} from '../consts'; +import {EVENTS} from '../core/consts'; import EmitService from './EmitService'; +import profileServiceApi from '../api/ProfileServiceAPI'; const NOT_USER = 'not_user'; const DEFAULT_AVATAR = 'https://d5qmjlya0ygtg.cloudfront.net/569/c5295/f9ad/47c8/96a0/66a65609b38d/original/331698.jpg'; @@ -15,13 +15,13 @@ class UserInfoService extends EmitService { } setUserLogin = async () => { - this.userInfo = await usersServiceApi.getSelfInfo(); + this.userInfo = await profileServiceApi.getSelfInfo(); this.next(EVENTS.CHANGE_USER_INFO, {...this.userInfo}); } getUserInfo = async () => { if (this.userInfo.login === NOT_USER) { - this.userInfo = await usersServiceApi.getSelfInfo(); + this.userInfo = await profileServiceApi.getSelfInfo(); } return {...this.userInfo}; diff --git a/src/utils/converters.js b/src/utils/converters.js deleted file mode 100644 index f2d97a8..0000000 --- a/src/utils/converters.js +++ /dev/null @@ -1,28 +0,0 @@ -import moment from 'moment'; - -export const makeApiName = (headers) => { - return headers['api-name'] ? 'testing' : 'production'; -}; - -export const makeDurationMessage = (startTime, endTime, format) => { - const duration = moment(endTime, format).millisecond() - moment(startTime, format).millisecond(); - return `${duration} мс`; -}; - -export const prepareClientLogElement = (client) => { - const {request, response} = client; - const {headers, method, url} = request; - const {status, message} = response; - - const data_base = makeApiName(headers); - - return { - ...client, - data_base, - method, - url, - status: status || 500, - message: message || 'Критическая ошибка сервера', - duration: makeDurationMessage(client.startTime, client.endTime), - }; -}; diff --git a/src/utils/jwtDecode.js b/src/utils/jwtDecode.js deleted file mode 100644 index ff07d02..0000000 --- a/src/utils/jwtDecode.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Функция для декодирования юникод текста - */ -export const base64DecodeUnicode = (string) => { - return decodeURIComponent( - Array.prototype.map - .call(atob(string), (c) => { - return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`; - }) - .join('') - ); -}; - -/** - * Функция декодирования jwt токена для получения времени смерти - * accessToken'a - */ -export const parseJwt = (token) => { - return JSON.parse( - base64DecodeUnicode( - token - .split('.')[1] - .replace(/-/g, '+') - .replace(/_/g, '/') - ) - ); -}; diff --git a/src/utils/urlUtils.js b/src/utils/urlUtils.js deleted file mode 100644 index c70023a..0000000 --- a/src/utils/urlUtils.js +++ /dev/null @@ -1,29 +0,0 @@ -import {stringify} from 'querystring'; -import toNumber from 'lodash/toNumber'; - -/** - * Из маршрута и объекта query создает строку для url - * @param {string} url - маршрут - * @param {Object} query - объект с данными - */ -export const makeUrlWithQuery = (url = '', query = {}) => { - const stringQuery = stringify(query); - return url + (stringQuery ? `?${stringQuery}` : ''); -}; - -/** - * Преобразует текстовое значение из url'a в номер страницы. Если не получается, то возвращает 1 страницу. - * @param {unknown} number - значение из url'a, которое мы хотим превратить в номер страницы - * @param {number} countPages - общее количество страниц - */ -export const prepareToNumber = (number, countPages) => { - const prepare = toNumber(number); - const prepareNaN = Number.isNaN(prepare) ? 1 : prepare; - if (prepareNaN < 1) { - return 1; - } - if (prepareNaN > countPages) { - return countPages; - } - return prepareNaN; -};