Feat: Dogs page.

This commit is contained in:
2025-08-09 10:44:33 +01:00
parent d5e5e1a111
commit 77393d2057
46 changed files with 1718 additions and 640 deletions

View File

@@ -66,6 +66,7 @@ export default class API {
*/
// User
// user
static async loginUser() {
let callback = {};
callback[flagCallback] = DOM.getHashPageCurrent();
@@ -76,7 +77,15 @@ export default class API {
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagUser] = users;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogUser, 'POST', dataRequest);
return await API.request(hashSaveUserUser, 'POST', dataRequest);
}
// company
static async saveCompanies(companies, formFilters, comment) {
let dataRequest = {};
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
dataRequest[flagCompany] = companies;
dataRequest[flagComment] = comment;
return await API.request(hashSaveDogCompany, 'POST', dataRequest);
}

View File

@@ -0,0 +1,77 @@
import API from "../../api.js";
import BusinessObjects from "../../lib/business_objects/business_objects.js";
import DOM from "../../dom.js";
import Events from "../../lib/events.js";
import TableBasePage from "../base_table.js";
import Utils from "../../lib/utils.js";
import Validation from "../../lib/validation.js";
import DogTableMixinPage from "./mixin_table.js";
export default class PageDogDogs extends TableBasePage {
static hash = hashPageDogDogs;
static attrIdRowObject = attrIdDog;
callSaveTableContent = API.saveDogs;
constructor(router) {
super(router);
this.dogMixin = new DogTableMixinPage(this);
}
initialize() {
this.sharedInitialize();
}
hookupFilters() {
this.sharedHookupFilters();
this.hookupFilterActive();
}
loadRowTable(rowJson) {
if (rowJson == null) return;
if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
}
getJsonRow(row) {
if (row == null) return;
let inputName = row.querySelector('td.' + flagName + ' .' + flagName);
let inputAppearance = row.querySelector('td.' + flagAppearance + ' .' + flagAppearance);
let inputMassKg = row.querySelector('td.' + flagMassKg + ' .' + flagMassKg);
let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
let jsonRow = {};
jsonRow[attrIdDog] = row.getAttribute(attrIdDog);
jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);
jsonRow[flagAppearance] = DOM.getElementAttributeValueCurrent(inputAppearance);
jsonRow[flagMassKg] = DOM.getElementAttributeValueCurrent(inputMassKg);
jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
console.log("jsonRow");
console.log(jsonRow);
return jsonRow;
}
initialiseRowNew(tbody, row) {
}
postInitialiseRowNewCallback(tbody) {
}
hookupTableMain() {
super.hookupTableMain();
this.hookupFieldsNameTable();
this.hookupFieldsAppearance();
this.hookupFieldsMassKg();
this.hookupFieldsNotesTable();
this.hookupFieldsActive();
}
hookupFieldsAppearance() {
this.hookupChangeHandlerTableCells(flagAppearance);
}
hookupFieldsMassKg() {
this.hookupChangeHandlerTableCells(flagMassKg);
}
leave() {
super.leave();
}
}

View File

@@ -0,0 +1,18 @@
import BasePage from "../base.js";
export default class PageUserCompany extends BasePage {
static hash = hashPageUserCompany;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
}
leave() {
super.leave();
}
}

View File

@@ -1,15 +1,86 @@
import BasePage from "../base.js";
import API from "../../api.js";
import DogTableMixinPage from "../dog/mixin_table.js";
import DOM from "../../dom.js";
import TableBasePage from "../base_table.js";
export default class PageUser extends BasePage {
export default class PageUser extends TableBasePage {
static hash = hashPageUserAccount;
static attrIdRowObject = attrIdUser;
callSaveTableContent = API.saveUsers;
constructor(router) {
super(router);
this.dogMixin = new DogTableMixinPage(this);
}
initialize() {
this.sharedInitialize();
this.hookupTableMain();
}
hookupFilters() {
}
loadRowTable(rowJson) {
if (rowJson == null) return;
if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
}
getTableRecords(dirtyOnly = false) {
dirtyOnly = true;
let container = document.querySelector('.' + flagCard + '.' + flagUser);
return [this.getJsonRow(container)];
}
getJsonRow(container) {
console.log("getJsonRow: ", container);
if (container == null) return;
let inputFirstname = container.querySelector(' #' + flagFirstname);
let inputSurname = container.querySelector(' #' + flagSurname);
let inputEmail = container.querySelector(' #' + flagEmail);
let divRole = container.querySelector('.' + flagRole);
let idUser = container.getAttribute(attrIdUser);
let jsonRow = {
[attrIdUserAuth0]: null
, [flagEmail]: null
, [flagIsEmailVerified]: null
, [attrIdCompany]: company[attrIdCompany]
, [flagIsSuperUser]: null
, [flagCanAdminDog]: null
, [flagCanAdminUser]: null
, [flagCompany]: null
, [flagRole]: null
};
jsonRow[attrIdUser] = idUser;
jsonRow[attrIdRole] = DOM.getElementAttributeValueCurrent(divRole);
jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);
jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);
jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(inputEmail);
return jsonRow;
}
initialiseRowNew(tbody, row) {
}
postInitialiseRowNewCallback(tbody) {
}
hookupTableMain() {
super.hookupTableMain();
this.hookupFieldsFirstname();
this.hookupFieldsSurname();
this.hookupFieldsEmail();
}
hookupFieldsFirstname() {
this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagFirstname);
}
hookupFieldsSurname() {
this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagSurname);
}
hookupFieldsEmail() {
this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagEmail);
}
leave() {

View File

@@ -11,7 +11,7 @@ import PageDogHome from './pages/dog/home.js';
import PageDogCommandCategories from './pages/dog/command_categories.js';
import PageDogCommands from './pages/dog/commands.js';
import PageDogDogCommandLinks from './pages/dog/dog_command_links.js';
// import PageDogDogs from './pages/dog/dogs.js';
import PageDogDogs from './pages/dog/dogs.js';
import PageDogLocations from './pages/dog/locations.js';
import PageDogButtonIcons from './pages/dog/button_icons.js';
import PageDogCommandButtonLinks from './pages/dog/command_button_links.js';
@@ -29,6 +29,7 @@ import PageRetentionSchedule from './pages/legal/retention_schedule.js';
// import PageUserLogout from './pages/user/logout.js';
import PageUser from './pages/user/user.js';
import PageUsers from './pages/user/users.js';
import PageUserCompany from './pages/user/company.js';
import API from './api.js';
import DOM from './dom.js';
@@ -50,7 +51,7 @@ export default class Router {
this.pages[hashPageDogCommandCategories] = { name: 'PageDogCommands', module: PageDogCommandCategories };
this.pages[hashPageDogCommands] = { name: 'PageDogCommands', module: PageDogCommands };
this.pages[hashPageDogDogCommandLinks] = { name: 'PageDogDogCommandLinks', module: PageDogDogCommandLinks };
// this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };
this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };
this.pages[hashPageDogLocations] = { name: 'PageDogLocations', module: PageDogLocations };
this.pages[hashPageDogButtonIcons] = { name: 'PageDogButtonIcons', module: PageDogButtonIcons };
this.pages[hashPageDogCommandButtonLinks] = { name: 'PageDogCommandButtonLinks', module: PageDogCommandButtonLinks };
@@ -67,6 +68,7 @@ export default class Router {
// this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };
this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };
this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };
this.pages[hashPageUserCompany] = { name: 'PageUserCompany', module: PageUserCompany };
// Routes
this.routes = {};
// Core
@@ -80,7 +82,7 @@ export default class Router {
this.routes[hashPageDogCommandCategories] = (isPopState = false) => this.navigateToHash(hashPageDogCommandCategories, isPopState);
this.routes[hashPageDogCommands] = (isPopState = false) => this.navigateToHash(hashPageDogCommands, isPopState);
this.routes[hashPageDogDogCommandLinks] = (isPopState = false) => this.navigateToHash(hashPageDogDogCommandLinks, isPopState);
// this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);
this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);
this.routes[hashPageDogLocations] = (isPopState = false) => this.navigateToHash(hashPageDogLocations, isPopState);
this.routes[hashPageDogButtonIcons] = (isPopState = false) => this.navigateToHash(hashPageDogButtonIcons, isPopState);
this.routes[hashPageDogCommandButtonLinks] = (isPopState = false) => this.navigateToHash(hashPageDogCommandButtonLinks, isPopState);
@@ -97,6 +99,7 @@ export default class Router {
// this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);
this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);
this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);
this.routes[hashPageUserCompany] = (isPopState = false) => this.navigateToHash(hashPageUserCompany, isPopState);
this.initialize();
}
loadPage(hashPage, isPopState = false) {