Feat: Founding Partner login with autocreation of User, User Role Link, Company, User Company Link as necessary and autologin with new user - for approved Founding Partners only, otherwise redirected to login page.

This commit is contained in:
2025-08-21 18:37:31 +01:00
parent 07543994bf
commit 12f5fc994f
29 changed files with 1843 additions and 324 deletions

View File

@@ -249,6 +249,7 @@ input.dirty, textarea.dirty, select.dirty {
.button-primary:hover {
background: var(--colour-secondary);
color: var(--colour-accent);
}
.button-light {
@@ -410,7 +411,8 @@ h5 {
font-size: 15px;
/* height: 18px; */
cursor: pointer;
padding: 4.5px 0;
padding: 0;
height: fit-content;
}
#overlayHamburger .container:hover {
color: var(--colour-page-background);
@@ -424,10 +426,7 @@ h5 {
}
#overlayHamburger .container a {
width: 100%;
/*
margin-top: 4.5px;
margin-bottom: 4.5px;
*/
padding: 4.5px 0;
color: var(--colour-text);
text-decoration: none;
line-height: initial;

File diff suppressed because one or more lines are too long

View File

@@ -70,6 +70,10 @@
display: none;
}
.container.authorisedUser.dirty {
background-color: white;
}
.container.save.button-cancel {
position: fixed;
top: 1vh;
@@ -85,6 +89,10 @@
padding: 1vh 1vw;
}
.container-input:has(.dirty) {
background-color: var(--colour-accent);
}
.container-input textarea {
width: 300px;
}

View File

@@ -1 +1 @@
{"version":3,"file":"css/user_company.bundle.css","mappings":";;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;;AAGA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;AACf;IACI,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,2BAA2B;IAC3B,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;AAC7B;;;AAGA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C;;;AChEA;IACI,aAAa;AACjB;;AAEA;IACI,eAAe;IACf,QAAQ;IACR,UAAU;IACV,UAAU;AACd;;AAEA;IACI,cAAc;AAClB;AACA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/user/company.css"],"sourcesContent":["\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n#pageBody {\n max-height: 88vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0.75vh 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","\n#formFilters {\n display: none;\n}\n\n.container.save.button-cancel {\n position: fixed;\n top: 1vh;\n right: 5vh;\n z-index: 2;\n}\n\n.container-input {\n margin: 0 auto;\n}\n.container-input input {\n max-width: 250px;\n padding: 1vh 1vw;\n}\n\n.container-input textarea {\n width: 300px;\n}"],"names":[],"sourceRoot":""}
{"version":3,"file":"css/user_company.bundle.css","mappings":";;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;;AAGA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;AACf;IACI,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,2BAA2B;IAC3B,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;AAC7B;;;AAGA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C;;;AChEA;IACI,aAAa;AACjB;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,eAAe;IACf,QAAQ;IACR,UAAU;IACV,UAAU;AACd;;AAEA;IACI,cAAc;AAClB;AACA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,sCAAsC;AAC1C;;AAEA;IACI,YAAY;AAChB,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/user/company.css"],"sourcesContent":["\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n#pageBody {\n max-height: 88vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0.75vh 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","\n#formFilters {\n display: none;\n}\n\n.container.authorisedUser.dirty {\n background-color: white;\n}\n\n.container.save.button-cancel {\n position: fixed;\n top: 1vh;\n right: 5vh;\n z-index: 2;\n}\n\n.container-input {\n margin: 0 auto;\n}\n.container-input input {\n max-width: 250px;\n padding: 1vh 1vw;\n}\n\n.container-input:has(.dirty) {\n background-color: var(--colour-accent);\n}\n\n.container-input textarea {\n width: 300px;\n}"],"names":[],"sourceRoot":""}

View File

@@ -723,7 +723,7 @@ var API = /*#__PURE__*/function () {
dataRequest[flagCompany] = companies;
dataRequest[flagComment] = comment;
_context4.next = 6;
return API.request(hashSaveDogCompany, 'POST', dataRequest);
return API.request(hashSaveUserCompany, 'POST', dataRequest);
case 6:
return _context4.abrupt("return", _context4.sent);
case 7:
@@ -8993,25 +8993,126 @@ function company_defineProperty(e, r, t) { return (r = company_toPropertyKey(r))
function company_toPropertyKey(t) { var i = company_toPrimitive(t, "string"); return "symbol" == company_typeof(i) ? i : i + ""; }
function company_toPrimitive(t, r) { if ("object" != company_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != company_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var PageUserCompany = /*#__PURE__*/function (_BasePage) {
var company_rowBlankDistraction;
var company_rowBlankAssessmentCommandModalityLink;
var PageUserCompany = /*#__PURE__*/function (_TableBasePage) {
function PageUserCompany(router) {
var _this;
company_classCallCheck(this, PageUserCompany);
return company_callSuper(this, PageUserCompany, [router]);
_this = company_callSuper(this, PageUserCompany, [router]);
company_defineProperty(_this, "callSaveTableContent", API.saveCompanies);
_this.dogMixin = new DogTableMixinPage(_this);
return _this;
}
company_inherits(PageUserCompany, _BasePage);
company_inherits(PageUserCompany, _TableBasePage);
return company_createClass(PageUserCompany, [{
key: "initialize",
value: function initialize() {
this.sharedInitialize();
}
}, {
key: "hookupFilters",
value: function hookupFilters() {}
}, {
key: "loadRowTable",
value: function loadRowTable(rowJson) {
if (rowJson == null) return;
if (_verbose) {
utils_Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson);
}
}
}, {
key: "getTableRecords",
value: function getTableRecords() {
var dirtyOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
dirtyOnly = true;
var container = document.querySelector('.' + flagContainer + '.' + flagUser);
var nameInput = document.getElementById(flagName);
var websiteInput = document.getElementById(flagWebsite);
var companies = [];
if (!dirtyOnly || container.classList.contains(flagDirty)) companies.push(company_defineProperty(company_defineProperty(company_defineProperty(company_defineProperty({}, attrIdCompany, container.getAttribute(attrIdCompany)), flagName, DOM.getElementAttributeValueCurrent(nameInput)), flagWebsite, DOM.getElementAttributeValueCurrent(websiteInput)), flagActive, true));
return companies;
}
}, {
key: "initialiseRowNew",
value: function initialiseRowNew(tbody, row) {}
}, {
key: "postInitialiseRowNewCallback",
value: function postInitialiseRowNewCallback(tbody) {}
}, {
key: "callFilterTableContent",
value: function callFilterTableContent() {
company_superPropGet(PageUserCompany, "callFilterTableContent", this, 3)([]);
}
}, {
key: "hookupTableMain",
value: function hookupTableMain() {
company_superPropGet(PageUserCompany, "hookupTableMain", this, 3)([]);
this.hookupNameInput();
this.hookupWebsiteInput();
}
}, {
key: "hookupNameInput",
value: function hookupNameInput() {
var _this2 = this;
var selector = '#' + flagName;
Events.initialiseEventHandler(selector, flagInitialised, function (nameInput) {
nameInput.addEventListener("change", function (event) {
nameInput = event.target;
var container = document.querySelector('.' + flagContainer + '.' + flagUser);
var wasDirtyContainer = container.classList.contains(flagDirty);
var wasDirtyElement = nameInput.classList.contains(flagDirty);
var isDirtyElement = DOM.updateAndCheckIsElementDirty(nameInput);
if (isDirtyElement == wasDirtyElement) return;
var isDirtyContainer = DOM.hasDirtyChildrenContainer(container); // wasDirtyContainer || isDirtyElement;
if (isDirtyContainer) {
container.classList.add(flagDirty);
} else {
container.classList.remove(flagDirty);
}
_this2.updateAndToggleShowButtonsSaveCancel();
});
});
}
}, {
key: "hookupWebsiteInput",
value: function hookupWebsiteInput() {
var _this3 = this;
var selector = '#' + flagWebsite;
Events.initialiseEventHandler(selector, flagInitialised, function (websiteInput) {
websiteInput.addEventListener("change", function (event) {
websiteInput = event.target;
var container = document.querySelector('.' + flagContainer + '.' + flagUser);
var wasDirtyContainer = container.classList.contains(flagDirty);
var wasDirtyElement = websiteInput.classList.contains(flagDirty);
var isDirtyElement = DOM.updateAndCheckIsElementDirty(websiteInput);
if (isDirtyElement == wasDirtyElement) return;
var isDirtyContainer = DOM.hasDirtyChildrenContainer(container); // wasDirtyContainer || isDirtyElement;
if (isDirtyContainer) {
container.classList.add(flagDirty);
} else {
container.classList.remove(flagDirty);
}
_this3.updateAndToggleShowButtonsSaveCancel();
});
});
}
}, {
key: "leave",
value: function leave() {
company_superPropGet(PageUserCompany, "leave", this, 3)([]);
}
}]);
}(BasePage);
}(TableBasePage);
company_defineProperty(PageUserCompany, "hash", hashPageUserCompany);
company_defineProperty(PageUserCompany, "attrIdRowObject", attrIdCompany);
;// ./static/js/router.js
function router_typeof(o) { "@babel/helpers - typeof"; return router_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, router_typeof(o); }

File diff suppressed because one or more lines are too long