@reldens/cms 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +316 -68
- package/admin/reldens-admin-client.css +5 -0
- package/admin/templates/fields/edit/text.html +1 -1
- package/install/css/installer.css +8 -0
- package/install/index.html +14 -6
- package/install/success.html +27 -25
- package/lib/admin-manager.js +39 -31
- package/lib/frontend.js +263 -139
- package/lib/installer.js +36 -9
- package/lib/manager.js +37 -5
- package/lib/templates-to-path-mapper.js +1 -1
- package/migrations/default-blocks.sql +8 -0
- package/migrations/default-entity-access.sql +9 -0
- package/migrations/default-homepage.sql +1 -1
- package/migrations/default-user.sql +1 -1
- package/migrations/install.sql +34 -9
- package/migrations/users-authentication.sql +2 -2
- package/package.json +4 -4
- package/templates/404.html +7 -29
- package/templates/css/styles.css +4 -1
- package/templates/domains/.gitkeep +0 -0
- package/templates/js/scripts.js +9 -7
- package/templates/layouts/default.html +21 -0
- package/templates/page.html +14 -32
- package/templates/partials/footer.html +35 -0
- package/templates/partials/header.html +36 -0
package/lib/admin-manager.js
CHANGED
|
@@ -662,10 +662,10 @@ class AdminManager
|
|
|
662
662
|
async generateEditRouteContent(req, driverResource, entityPath)
|
|
663
663
|
{
|
|
664
664
|
let idProperty = this.fetchEntityIdPropertyKey(driverResource);
|
|
665
|
-
let idValue = (req?.query
|
|
666
|
-
let templateTitle = (
|
|
667
|
-
let loadedEntity =
|
|
668
|
-
let entityViewRoute =
|
|
665
|
+
let idValue = String(sc.get(req?.query, idProperty, ''));
|
|
666
|
+
let templateTitle = (!idValue ? 'Create' : 'Edit')+' '+this.translations.labels[driverResource.id()];
|
|
667
|
+
let loadedEntity = !idValue ? null :await this.loadEntityById(driverResource, idValue);
|
|
668
|
+
let entityViewRoute = !idValue
|
|
669
669
|
? this.rootPath+'/'+driverResource.entityPath
|
|
670
670
|
: this.generateEntityRoute('viewPath', driverResource, idProperty, loadedEntity);
|
|
671
671
|
let renderedEditProperties = {
|
|
@@ -677,32 +677,29 @@ class AdminManager
|
|
|
677
677
|
};
|
|
678
678
|
let propertiesKeys = Object.keys(driverResource.options.properties);
|
|
679
679
|
for(let propertyKey of propertiesKeys){
|
|
680
|
-
let
|
|
680
|
+
let property = driverResource.options.properties[propertyKey];
|
|
681
681
|
let fieldDisabled = -1 === driverResource.options.editProperties.indexOf(propertyKey);
|
|
682
|
-
let isRequired = resourceProperty.isRequired ? ' required="required"' : '';
|
|
683
|
-
if(resourceProperty.isUpload && loadedEntity){
|
|
684
|
-
isRequired = '';
|
|
685
|
-
}
|
|
686
|
-
let inputType = this.getInputType(resourceProperty, fieldDisabled);
|
|
687
682
|
renderedEditProperties[propertyKey] = await this.render(
|
|
688
|
-
this.adminFilesContents.fields.edit[this.propertyType(
|
|
683
|
+
this.adminFilesContents.fields.edit[this.propertyType(property, 'edit')],
|
|
689
684
|
{
|
|
690
685
|
fieldName: propertyKey,
|
|
691
686
|
fieldValue: await this.generatePropertyEditRenderedValue(
|
|
692
687
|
loadedEntity,
|
|
693
688
|
propertyKey,
|
|
694
|
-
|
|
689
|
+
property,
|
|
695
690
|
fieldDisabled
|
|
696
691
|
),
|
|
697
692
|
fieldDisabled: fieldDisabled ? ' disabled="disabled"' : '',
|
|
698
|
-
required: isRequired,
|
|
699
|
-
multiple:
|
|
700
|
-
inputType
|
|
693
|
+
required: (!property.isUpload || !loadedEntity) && property.isRequired ? ' required="required"' : '',
|
|
694
|
+
multiple: property.isArray ? ' multiple="multiple"' : '',
|
|
695
|
+
inputType: this.getInputType(property, fieldDisabled)
|
|
701
696
|
}
|
|
702
697
|
);
|
|
703
698
|
}
|
|
704
|
-
|
|
705
|
-
|
|
699
|
+
return await this.renderRoute(
|
|
700
|
+
await this.render(this.adminContents.entities[entityPath].edit, renderedEditProperties),
|
|
701
|
+
this.adminContents.sideBar
|
|
702
|
+
);
|
|
706
703
|
}
|
|
707
704
|
|
|
708
705
|
getInputType(resourceProperty, fieldDisabled)
|
|
@@ -710,12 +707,18 @@ class AdminManager
|
|
|
710
707
|
if('datetime' === resourceProperty.type && !fieldDisabled){
|
|
711
708
|
return 'datetime-local';
|
|
712
709
|
}
|
|
710
|
+
if('number' === resourceProperty.type){
|
|
711
|
+
return 'number';
|
|
712
|
+
}
|
|
713
713
|
return 'text';
|
|
714
714
|
}
|
|
715
715
|
|
|
716
716
|
async loadEntityById(driverResource, id)
|
|
717
717
|
{
|
|
718
718
|
let entityRepository = this.dataServer.getEntity(driverResource.entityKey);
|
|
719
|
+
if(!entityRepository){
|
|
720
|
+
return false;
|
|
721
|
+
}
|
|
719
722
|
return await entityRepository.loadByIdWithRelations(id);
|
|
720
723
|
}
|
|
721
724
|
|
|
@@ -735,24 +738,23 @@ class AdminManager
|
|
|
735
738
|
};
|
|
736
739
|
let entitySerializedData = {};
|
|
737
740
|
for(let propertyKey of driverResource.options.showProperties){
|
|
738
|
-
let
|
|
741
|
+
let property = driverResource.options.properties[propertyKey];
|
|
739
742
|
let {fieldValue, fieldName} = this.generatePropertyRenderedValueWithLabel(
|
|
740
743
|
loadedEntity,
|
|
741
744
|
propertyKey,
|
|
742
|
-
|
|
745
|
+
property
|
|
743
746
|
);
|
|
744
747
|
entitySerializedData[fieldName] = fieldValue;
|
|
745
|
-
let renderedFieldValue = await this.generatePropertyRenderedValue(
|
|
746
|
-
fieldValue,
|
|
747
|
-
fieldName,
|
|
748
|
-
resourceProperty,
|
|
749
|
-
'view'
|
|
750
|
-
);
|
|
751
748
|
renderedViewProperties[propertyKey] = await this.render(
|
|
752
|
-
this.adminFilesContents.fields.view[this.propertyType(
|
|
749
|
+
this.adminFilesContents.fields.view[this.propertyType(property)],
|
|
753
750
|
{
|
|
754
751
|
fieldName: propertyKey,
|
|
755
|
-
fieldValue:
|
|
752
|
+
fieldValue: await this.generatePropertyRenderedValue(
|
|
753
|
+
fieldValue,
|
|
754
|
+
fieldName,
|
|
755
|
+
property,
|
|
756
|
+
'view'
|
|
757
|
+
),
|
|
756
758
|
fieldOriginalValue: fieldValue,
|
|
757
759
|
target: ' target="_blank"'
|
|
758
760
|
}
|
|
@@ -762,13 +764,15 @@ class AdminManager
|
|
|
762
764
|
await this.events.emit('adminEntityExtraData', extraDataEvent);
|
|
763
765
|
entitySerializedData = extraDataEvent.entitySerializedData;
|
|
764
766
|
renderedViewProperties.entitySerializedData = JSON.stringify(entitySerializedData).replace(/"/g, '"');
|
|
765
|
-
|
|
766
|
-
|
|
767
|
+
return await this.renderRoute(
|
|
768
|
+
await this.render(this.adminContents.entities[entityPath].view, renderedViewProperties),
|
|
769
|
+
this.adminContents.sideBar
|
|
770
|
+
);
|
|
767
771
|
}
|
|
768
772
|
|
|
769
773
|
propertyType(resourceProperty, templateType)
|
|
770
774
|
{
|
|
771
|
-
let propertyType = resourceProperty
|
|
775
|
+
let propertyType = sc.get(resourceProperty, 'type', 'text');
|
|
772
776
|
if('reference' === propertyType && 'edit' === templateType){
|
|
773
777
|
return 'select';
|
|
774
778
|
}
|
|
@@ -805,7 +809,8 @@ class AdminManager
|
|
|
805
809
|
});
|
|
806
810
|
let entitiesRows = await this.loadEntitiesForList(driverResource, pageSize, page, req, filters);
|
|
807
811
|
let listRawContent = this.adminContents.entities[entityPath].list.toString();
|
|
808
|
-
let
|
|
812
|
+
let totalEntities = await this.countTotalEntities(driverResource, filters);
|
|
813
|
+
let totalPages = totalEntities <= pageSize ? 1 : Math.ceil(totalEntities / pageSize);
|
|
809
814
|
let pages = PageRangeProvider.fetch(page, totalPages);
|
|
810
815
|
let renderedPagination = '';
|
|
811
816
|
for(let page of pages){
|
|
@@ -858,6 +863,9 @@ class AdminManager
|
|
|
858
863
|
{
|
|
859
864
|
/** @type {BaseDriver|ObjectionJsDriver} entityRepository **/
|
|
860
865
|
let entityRepository = this.dataServer.getEntity(driverResource.entityKey);
|
|
866
|
+
if(!entityRepository){
|
|
867
|
+
return false;
|
|
868
|
+
}
|
|
861
869
|
return await entityRepository.count(filters);
|
|
862
870
|
}
|
|
863
871
|
|