├── .gitattributes ├── .gitignore ├── .nojekyll ├── .snyk ├── .snyk-react-client-scr ├── .travis.yml ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── LICENSE ├── README.md ├── commitlint.config.js ├── docs-src-cn ├── antora-playbook.yml ├── api-reference │ ├── cuba-react-core │ │ ├── assets │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── images │ │ │ │ ├── icons.png │ │ │ │ ├── icons@2x.png │ │ │ │ ├── widgets.png │ │ │ │ └── widgets@2x.png │ │ │ └── js │ │ │ │ ├── main.js │ │ │ │ └── search.js │ │ ├── classes │ │ │ ├── _app_mainstore_.mainstore.html │ │ │ ├── _app_security_.security.html │ │ │ ├── _data_collection_.clientsidedatacollectionstoreimpl.html │ │ │ ├── _data_collection_.collection.html │ │ │ ├── _data_collection_.datacollectionstoreimpl.html │ │ │ ├── _data_datacontext_.datacontext.html │ │ │ ├── _data_instance_.datainstancestore.html │ │ │ └── _data_instance_.instance.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ │ ├── _access_control_accesscontrol_.accesscontrolprops.html │ │ │ ├── _access_control_accesscontrol_.accesscontrolrequirements.html │ │ │ ├── _access_control_accesscontrol_.attributepermissionrequirement.html │ │ │ ├── _access_control_accesscontrol_.entitypermissionrequirement.html │ │ │ ├── _access_control_attrpermaccesscontrol_.attrpermaccesscontrolprops.html │ │ │ ├── _access_control_entitypermaccesscontrol_.entitypermaccesscontrolprops.html │ │ │ ├── _access_control_specificpermaccesscontrol_.specificpermaccesscontrolprops.html │ │ │ ├── _app_cubaappprovider_.cubaappconfig.html │ │ │ ├── _app_cubaappprovider_.cubaappcontextvalue.html │ │ │ ├── _app_cubaappprovider_.cubaappproviderprops.html │ │ │ ├── _app_mainstore_.mainstoreinjected.html │ │ │ ├── _app_menuconfig_.routeitem.html │ │ │ ├── _app_menuconfig_.submenu.html │ │ │ ├── _data_collection_.clientsidedatacollectionoptions.html │ │ │ ├── _data_collection_.clientsidedatacollectionstore.html │ │ │ ├── _data_collection_.datacollectioninjected.html │ │ │ ├── _data_collection_.datacollectionoptions.html │ │ │ ├── _data_collection_.datacollectionprops.html │ │ │ ├── _data_collection_.datacollectionstore.html │ │ │ ├── _data_datacontext_.containers.html │ │ │ ├── _data_datacontext_.datacontainer.html │ │ │ ├── _data_instance_.datainstanceinjected.html │ │ │ ├── _data_instance_.datainstanceoptions.html │ │ │ └── _data_instance_.datainstanceprops.html │ │ └── modules │ │ │ ├── _access_control_accesscontrol_.html │ │ │ ├── _access_control_attrpermaccesscontrol_.html │ │ │ ├── _access_control_entitypermaccesscontrol_.html │ │ │ ├── _access_control_specificpermaccesscontrol_.html │ │ │ ├── _app_cubaappprovider_.html │ │ │ ├── _app_mainstore_.html │ │ │ ├── _app_menuconfig_.html │ │ │ ├── _app_security_.html │ │ │ ├── _app_security_test_.html │ │ │ ├── _data_association_.html │ │ │ ├── _data_collection_.html │ │ │ ├── _data_collection_test_.html │ │ │ ├── _data_datacontext_.html │ │ │ ├── _data_instance_.html │ │ │ ├── _data_instance_test_.html │ │ │ ├── _index_.html │ │ │ ├── _util_collation_.html │ │ │ ├── _util_collation_test_.html │ │ │ ├── _util_data_.html │ │ │ ├── _util_errorhandling_.html │ │ │ ├── _util_formats_.html │ │ │ ├── _util_internal_data_.html │ │ │ ├── _util_metadata_.html │ │ │ ├── _util_statemanagement_.html │ │ │ └── _util_temporal_.html │ ├── cuba-react-ui │ │ ├── assets │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── images │ │ │ │ ├── icons.png │ │ │ │ ├── icons@2x.png │ │ │ │ ├── widgets.png │ │ │ │ └── widgets@2x.png │ │ │ └── js │ │ │ │ ├── main.js │ │ │ │ └── search.js │ │ ├── classes │ │ │ ├── _ui_fileupload_.fileuploadcomponent.html │ │ │ ├── _ui_form_form_.entityeditorcomponent.html │ │ │ ├── _ui_form_form_.nestedentitiestablefieldcomponent.html │ │ │ ├── _ui_form_form_.nestedentityfieldcomponent.html │ │ │ ├── _ui_imagepreview_.imagepreviewcomponent.html │ │ │ ├── _ui_paging_paging_.paging.html │ │ │ ├── _ui_table_datatable_.datatablecomponent.html │ │ │ ├── _ui_table_datatablecustomfilter_.datatablecustomfiltercomponent.html │ │ │ ├── _ui_table_datatableintervaleditor_.datatableintervaleditorcomponent.html │ │ │ └── _ui_table_datatablelisteditor_.datatablelisteditor.html │ │ ├── enums │ │ │ ├── _ui_table_datatablecustomfilter_.operatorgroup.html │ │ │ └── _ui_table_datatablelisteditor_.datatablelisteditortype.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ │ ├── _ui_entityproperty_.entitypropertyprops.html │ │ │ ├── _ui_entityselectfield_.entityselectfieldprops.html │ │ │ ├── _ui_fileupload_.fileinfo.html │ │ │ ├── _ui_fileupload_.fileuploaddropareaprops.html │ │ │ ├── _ui_fileupload_.fileuploadprops.html │ │ │ ├── _ui_form_form_.entityeditorprops.html │ │ │ ├── _ui_form_form_.fieldprops.html │ │ │ ├── _ui_form_form_.nestedentitiestablefieldprops.html │ │ │ ├── _ui_form_form_.nestedentityfieldprops.html │ │ │ ├── _ui_imagepreview_.imagepreviewprops.html │ │ │ ├── _ui_table_datatable_.columndefinition.html │ │ │ ├── _ui_table_datatable_.datatableprops.html │ │ │ ├── _ui_table_datatablecustomfilter_.captionvaluepair.html │ │ │ ├── _ui_table_datatablecustomfilter_.datatablecustomfilterprops.html │ │ │ ├── _ui_table_datatablehelpers_.datacolumnconfig.html │ │ │ ├── _ui_table_datatablehelpers_.tablechangedto.html │ │ │ ├── _ui_table_datatableintervaleditor_.datatableintervaleditorprops.html │ │ │ ├── _ui_table_datatableintervaleditor_.temporalinterval.html │ │ │ ├── _ui_table_datatablelisteditor_.datatablelisteditorprops.html │ │ │ └── _ui_table_datatablelisteditor_.listitemtagprops.html │ │ └── modules │ │ │ ├── _errorhandling_test_.html │ │ │ ├── _i18n_i18nprovider_.html │ │ │ ├── _i18n_validation_.html │ │ │ ├── _index_.html │ │ │ ├── _ui_entityproperty_.html │ │ │ ├── _ui_entityselectfield_.html │ │ │ ├── _ui_fileupload_.html │ │ │ ├── _ui_form_bigdecimalinput_.html │ │ │ ├── _ui_form_doubleinput_.html │ │ │ ├── _ui_form_fieldpermissioncontainer_test_.html │ │ │ ├── _ui_form_fieldpermssioncontainer_.html │ │ │ ├── _ui_form_form_.html │ │ │ ├── _ui_form_inputwithmask_.html │ │ │ ├── _ui_form_integerinput_.html │ │ │ ├── _ui_form_longinput_.html │ │ │ ├── _ui_form_uuidinput_.html │ │ │ ├── _ui_imagepreview_.html │ │ │ ├── _ui_msg_.html │ │ │ ├── _ui_multilinetext_.html │ │ │ ├── _ui_paging_paging_.html │ │ │ ├── _ui_paging_paging_test_.html │ │ │ ├── _ui_spinner_.html │ │ │ ├── _ui_table_datatable_.html │ │ │ ├── _ui_table_datatablecell_.html │ │ │ ├── _ui_table_datatablecustomfilter_.html │ │ │ ├── _ui_table_datatablecustomfilterfields_.html │ │ │ ├── _ui_table_datatablehelpers_.html │ │ │ ├── _ui_table_datatableintervaleditor_.html │ │ │ ├── _ui_table_datatableintervalfunctions_.html │ │ │ ├── _ui_table_datatableintervalfunctions_test_.html │ │ │ ├── _ui_table_datatablelisteditor_.html │ │ │ ├── _util_errorhandling_.html │ │ │ ├── _util_files_.html │ │ │ ├── _util_formatting_.html │ │ │ ├── _util_formatting_test_.html │ │ │ ├── _util_regex_.html │ │ │ └── _util_regex_test_.html │ └── cuba-rest-js │ │ ├── assets │ │ ├── css │ │ │ └── main.css │ │ ├── images │ │ │ ├── icons.png │ │ │ ├── icons@2x.png │ │ │ ├── widgets.png │ │ │ └── widgets@2x.png │ │ └── js │ │ │ ├── main.js │ │ │ └── search.js │ │ ├── classes │ │ ├── _cuba_.cubaapp.html │ │ └── _storage_.defaultstorage.html │ │ ├── enums │ │ └── _model_.predefinedview.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ ├── _cuba_.appconfig.html │ │ ├── _cuba_.entitiesloadoptions.html │ │ ├── _cuba_.fetchoptions.html │ │ ├── _cuba_.loginoptions.html │ │ ├── _cuba_.responseerror.html │ │ ├── _filter_.condition.html │ │ ├── _filter_.conditionsgroup.html │ │ ├── _filter_.entityfilter.html │ │ ├── _model_.effectivepermsinfo.html │ │ ├── _model_.effectivepermsloadoptions.html │ │ ├── _model_.entitieswithcount.html │ │ ├── _model_.entitymessages.html │ │ ├── _model_.enuminfo.html │ │ ├── _model_.enumvalueinfo.html │ │ ├── _model_.metaclassinfo.html │ │ ├── _model_.metapropertyinfo.html │ │ ├── _model_.permission.html │ │ ├── _model_.serializedentityprops.html │ │ ├── _model_.userinfo.html │ │ └── _model_.view.html │ │ └── modules │ │ ├── _cuba_.html │ │ ├── _filter_.html │ │ ├── _model_.html │ │ ├── _security_.html │ │ ├── _storage_.html │ │ └── _util_.html ├── doc-component-repo │ ├── antora.yml │ └── modules │ │ ├── client-polymer │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── index.adoc │ │ │ └── polymer │ │ │ ├── cuba_web_components.adoc │ │ │ ├── cuba_web_components │ │ │ ├── polymer_inintialization.adoc │ │ │ └── polymer_working_with_data.adoc │ │ │ ├── polymer2_typescript │ │ │ ├── polymer2_typescript.adoc │ │ │ └── polymer2_typescript_components.adoc │ │ │ ├── polymer_build_and_structure.adoc │ │ │ ├── polymer_build_and_structure │ │ │ ├── polymer_directory_structure.adoc │ │ │ ├── polymer_hot_deploy.adoc │ │ │ └── polymer_tools.adoc │ │ │ ├── polymer_offline.adoc │ │ │ ├── polymer_requirements.adoc │ │ │ ├── polymer_styling.adoc │ │ │ ├── polymer_supported_browsers.adoc │ │ │ └── polymer_troubleshooting.adoc │ │ ├── client-react-native │ │ ├── images │ │ │ └── RNDemo.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── learning-path.adoc │ │ │ ├── starter-guide.adoc │ │ │ └── technologies.adoc │ │ ├── client-react │ │ ├── images │ │ │ ├── data-table-demo.gif │ │ │ ├── home-screen.png │ │ │ ├── login-screen.png │ │ │ ├── pet-clinic-browser.png │ │ │ ├── pet-clinic-editor.png │ │ │ ├── studio-adding-frontend-component.gif │ │ │ └── studio-create-front-module.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── backend-model.adoc │ │ │ ├── build.adoc │ │ │ ├── config.adoc │ │ │ ├── creating-react-components.adoc │ │ │ ├── forms.adoc │ │ │ ├── i18n.adoc │ │ │ ├── learning-path.adoc │ │ │ ├── mobx.adoc │ │ │ ├── routing.adoc │ │ │ ├── security.adoc │ │ │ ├── starter-guide.adoc │ │ │ ├── supported-browsers.adoc │ │ │ ├── sync-project-model.adoc │ │ │ ├── technologies.adoc │ │ │ └── theme.adoc │ │ ├── cuba-react-core │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── access-control.adoc │ │ │ ├── attr-perm-access-control.adoc │ │ │ ├── client-side-data-collection-store.adoc │ │ │ ├── cuba-app-provider.adoc │ │ │ ├── data-collection-store.adoc │ │ │ ├── data-instance-store.adoc │ │ │ ├── entity-perm-access-control.adoc │ │ │ ├── index.adoc │ │ │ ├── main-store.adoc │ │ │ ├── security.adoc │ │ │ └── specific-perm-access-control.adoc │ │ ├── cuba-react-ui │ │ ├── images │ │ │ └── FileUploadAndImagePreviewDemo.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── data-table.adoc │ │ │ ├── entity-editor.adoc │ │ │ ├── entity-property.adoc │ │ │ ├── file-upload.adoc │ │ │ ├── form-field.adoc │ │ │ ├── image-preview.adoc │ │ │ ├── index.adoc │ │ │ ├── nested-entities-table-field.adoc │ │ │ └── nested-entity-field.adoc │ │ ├── cuba-rest-js │ │ ├── nav.adoc │ │ └── pages │ │ │ └── index.adoc │ │ ├── generator │ │ ├── images │ │ │ ├── browser-cards.png │ │ │ ├── browser-list.png │ │ │ ├── interactive-projects.png │ │ │ └── studio-integration.png │ │ ├── nav.adoc │ │ ├── pages │ │ │ ├── commands-reference.adoc │ │ │ └── index.adoc │ │ └── partials │ │ │ └── feat-available-in-studio.adoc │ │ ├── getting-started │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── cli-specific-instructions.adoc │ │ │ ├── index.adoc │ │ │ └── learning-path.adoc │ │ ├── libs │ │ └── nav.adoc │ │ ├── overview │ │ ├── nav.adoc │ │ ├── pages │ │ │ └── index.adoc │ │ └── partials │ │ │ └── getting-started-note.adoc │ │ └── typescript-sdk │ │ ├── nav.adoc │ │ └── pages │ │ ├── entities.adoc │ │ ├── enums.adoc │ │ └── index.adoc ├── redirect-page-template.html └── supplemental-ui │ └── partials │ ├── LICENSE │ ├── footer-scripts.hbs │ ├── head-scripts.hbs │ ├── head-styles.hbs │ └── header-content.hbs ├── docs-src ├── antora-playbook.yml ├── api-reference │ ├── cuba-react-core │ │ ├── assets │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── images │ │ │ │ ├── icons.png │ │ │ │ ├── icons@2x.png │ │ │ │ ├── widgets.png │ │ │ │ └── widgets@2x.png │ │ │ └── js │ │ │ │ ├── main.js │ │ │ │ └── search.js │ │ ├── classes │ │ │ ├── _app_mainstore_.mainstore.html │ │ │ ├── _app_security_.security.html │ │ │ ├── _data_collection_.clientsidedatacollectionstoreimpl.html │ │ │ ├── _data_collection_.collection.html │ │ │ ├── _data_collection_.datacollectionstoreimpl.html │ │ │ ├── _data_datacontext_.datacontext.html │ │ │ ├── _data_instance_.datainstancestore.html │ │ │ └── _data_instance_.instance.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ │ ├── _access_control_accesscontrol_.accesscontrolprops.html │ │ │ ├── _access_control_accesscontrol_.accesscontrolrequirements.html │ │ │ ├── _access_control_accesscontrol_.attributepermissionrequirement.html │ │ │ ├── _access_control_accesscontrol_.entitypermissionrequirement.html │ │ │ ├── _access_control_attrpermaccesscontrol_.attrpermaccesscontrolprops.html │ │ │ ├── _access_control_entitypermaccesscontrol_.entitypermaccesscontrolprops.html │ │ │ ├── _access_control_specificpermaccesscontrol_.specificpermaccesscontrolprops.html │ │ │ ├── _app_cubaappprovider_.cubaappconfig.html │ │ │ ├── _app_cubaappprovider_.cubaappcontextvalue.html │ │ │ ├── _app_cubaappprovider_.cubaappproviderprops.html │ │ │ ├── _app_mainstore_.mainstoreinjected.html │ │ │ ├── _app_menuconfig_.routeitem.html │ │ │ ├── _app_menuconfig_.submenu.html │ │ │ ├── _data_collection_.clientsidedatacollectionoptions.html │ │ │ ├── _data_collection_.clientsidedatacollectionstore.html │ │ │ ├── _data_collection_.datacollectioninjected.html │ │ │ ├── _data_collection_.datacollectionoptions.html │ │ │ ├── _data_collection_.datacollectionprops.html │ │ │ ├── _data_collection_.datacollectionstore.html │ │ │ ├── _data_datacontext_.containers.html │ │ │ ├── _data_datacontext_.datacontainer.html │ │ │ ├── _data_instance_.datainstanceinjected.html │ │ │ ├── _data_instance_.datainstanceoptions.html │ │ │ └── _data_instance_.datainstanceprops.html │ │ └── modules │ │ │ ├── _access_control_accesscontrol_.html │ │ │ ├── _access_control_attrpermaccesscontrol_.html │ │ │ ├── _access_control_entitypermaccesscontrol_.html │ │ │ ├── _access_control_specificpermaccesscontrol_.html │ │ │ ├── _app_cubaappprovider_.html │ │ │ ├── _app_mainstore_.html │ │ │ ├── _app_menuconfig_.html │ │ │ ├── _app_security_.html │ │ │ ├── _app_security_test_.html │ │ │ ├── _data_association_.html │ │ │ ├── _data_collection_.html │ │ │ ├── _data_collection_test_.html │ │ │ ├── _data_datacontext_.html │ │ │ ├── _data_instance_.html │ │ │ ├── _data_instance_test_.html │ │ │ ├── _index_.html │ │ │ ├── _util_collation_.html │ │ │ ├── _util_collation_test_.html │ │ │ ├── _util_data_.html │ │ │ ├── _util_errorhandling_.html │ │ │ ├── _util_formats_.html │ │ │ ├── _util_internal_data_.html │ │ │ ├── _util_metadata_.html │ │ │ ├── _util_statemanagement_.html │ │ │ └── _util_temporal_.html │ ├── cuba-react-ui │ │ ├── assets │ │ │ ├── css │ │ │ │ └── main.css │ │ │ ├── images │ │ │ │ ├── icons.png │ │ │ │ ├── icons@2x.png │ │ │ │ ├── widgets.png │ │ │ │ └── widgets@2x.png │ │ │ └── js │ │ │ │ ├── main.js │ │ │ │ └── search.js │ │ ├── classes │ │ │ ├── _ui_fileupload_.fileuploadcomponent.html │ │ │ ├── _ui_form_form_.entityeditorcomponent.html │ │ │ ├── _ui_form_form_.nestedentitiestablefieldcomponent.html │ │ │ ├── _ui_form_form_.nestedentityfieldcomponent.html │ │ │ ├── _ui_imagepreview_.imagepreviewcomponent.html │ │ │ ├── _ui_paging_paging_.paging.html │ │ │ ├── _ui_table_datatable_.datatablecomponent.html │ │ │ ├── _ui_table_datatablecustomfilter_.datatablecustomfiltercomponent.html │ │ │ ├── _ui_table_datatableintervaleditor_.datatableintervaleditorcomponent.html │ │ │ └── _ui_table_datatablelisteditor_.datatablelisteditor.html │ │ ├── enums │ │ │ ├── _ui_table_datatablecustomfilter_.operatorgroup.html │ │ │ └── _ui_table_datatablelisteditor_.datatablelisteditortype.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ │ ├── _ui_entityproperty_.entitypropertyprops.html │ │ │ ├── _ui_entityselectfield_.entityselectfieldprops.html │ │ │ ├── _ui_fileupload_.fileinfo.html │ │ │ ├── _ui_fileupload_.fileuploaddropareaprops.html │ │ │ ├── _ui_fileupload_.fileuploadprops.html │ │ │ ├── _ui_form_form_.entityeditorprops.html │ │ │ ├── _ui_form_form_.fieldprops.html │ │ │ ├── _ui_form_form_.nestedentitiestablefieldprops.html │ │ │ ├── _ui_form_form_.nestedentityfieldprops.html │ │ │ ├── _ui_imagepreview_.imagepreviewprops.html │ │ │ ├── _ui_table_datatable_.columndefinition.html │ │ │ ├── _ui_table_datatable_.datatableprops.html │ │ │ ├── _ui_table_datatablecustomfilter_.captionvaluepair.html │ │ │ ├── _ui_table_datatablecustomfilter_.datatablecustomfilterprops.html │ │ │ ├── _ui_table_datatablehelpers_.datacolumnconfig.html │ │ │ ├── _ui_table_datatablehelpers_.tablechangedto.html │ │ │ ├── _ui_table_datatableintervaleditor_.datatableintervaleditorprops.html │ │ │ ├── _ui_table_datatableintervaleditor_.temporalinterval.html │ │ │ ├── _ui_table_datatablelisteditor_.datatablelisteditorprops.html │ │ │ └── _ui_table_datatablelisteditor_.listitemtagprops.html │ │ └── modules │ │ │ ├── _errorhandling_test_.html │ │ │ ├── _i18n_i18nprovider_.html │ │ │ ├── _i18n_validation_.html │ │ │ ├── _index_.html │ │ │ ├── _ui_entityproperty_.html │ │ │ ├── _ui_entityselectfield_.html │ │ │ ├── _ui_fileupload_.html │ │ │ ├── _ui_form_bigdecimalinput_.html │ │ │ ├── _ui_form_doubleinput_.html │ │ │ ├── _ui_form_fieldpermissioncontainer_test_.html │ │ │ ├── _ui_form_fieldpermssioncontainer_.html │ │ │ ├── _ui_form_form_.html │ │ │ ├── _ui_form_inputwithmask_.html │ │ │ ├── _ui_form_integerinput_.html │ │ │ ├── _ui_form_longinput_.html │ │ │ ├── _ui_form_uuidinput_.html │ │ │ ├── _ui_imagepreview_.html │ │ │ ├── _ui_msg_.html │ │ │ ├── _ui_multilinetext_.html │ │ │ ├── _ui_paging_paging_.html │ │ │ ├── _ui_paging_paging_test_.html │ │ │ ├── _ui_spinner_.html │ │ │ ├── _ui_table_datatable_.html │ │ │ ├── _ui_table_datatablecell_.html │ │ │ ├── _ui_table_datatablecustomfilter_.html │ │ │ ├── _ui_table_datatablecustomfilterfields_.html │ │ │ ├── _ui_table_datatablehelpers_.html │ │ │ ├── _ui_table_datatableintervaleditor_.html │ │ │ ├── _ui_table_datatableintervalfunctions_.html │ │ │ ├── _ui_table_datatableintervalfunctions_test_.html │ │ │ ├── _ui_table_datatablelisteditor_.html │ │ │ ├── _util_errorhandling_.html │ │ │ ├── _util_files_.html │ │ │ ├── _util_formatting_.html │ │ │ ├── _util_formatting_test_.html │ │ │ ├── _util_regex_.html │ │ │ └── _util_regex_test_.html │ └── cuba-rest-js │ │ ├── assets │ │ ├── css │ │ │ └── main.css │ │ ├── images │ │ │ ├── icons.png │ │ │ ├── icons@2x.png │ │ │ ├── widgets.png │ │ │ └── widgets@2x.png │ │ └── js │ │ │ ├── main.js │ │ │ └── search.js │ │ ├── classes │ │ ├── _cuba_.cubaapp.html │ │ └── _storage_.defaultstorage.html │ │ ├── enums │ │ └── _model_.predefinedview.html │ │ ├── globals.html │ │ ├── index.html │ │ ├── interfaces │ │ ├── _cuba_.appconfig.html │ │ ├── _cuba_.entitiesloadoptions.html │ │ ├── _cuba_.fetchoptions.html │ │ ├── _cuba_.loginoptions.html │ │ ├── _cuba_.responseerror.html │ │ ├── _filter_.condition.html │ │ ├── _filter_.conditionsgroup.html │ │ ├── _filter_.entityfilter.html │ │ ├── _model_.effectivepermsinfo.html │ │ ├── _model_.effectivepermsloadoptions.html │ │ ├── _model_.entitieswithcount.html │ │ ├── _model_.entitymessages.html │ │ ├── _model_.enuminfo.html │ │ ├── _model_.enumvalueinfo.html │ │ ├── _model_.metaclassinfo.html │ │ ├── _model_.metapropertyinfo.html │ │ ├── _model_.permission.html │ │ ├── _model_.serializedentityprops.html │ │ ├── _model_.userinfo.html │ │ └── _model_.view.html │ │ └── modules │ │ ├── _cuba_.html │ │ ├── _filter_.html │ │ ├── _model_.html │ │ ├── _security_.html │ │ ├── _storage_.html │ │ └── _util_.html ├── doc-component-repo │ ├── antora.yml │ └── modules │ │ ├── client-polymer │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── index.adoc │ │ │ └── polymer │ │ │ ├── cuba_web_components.adoc │ │ │ ├── cuba_web_components │ │ │ ├── polymer_inintialization.adoc │ │ │ └── polymer_working_with_data.adoc │ │ │ ├── polymer2_typescript │ │ │ ├── polymer2_typescript.adoc │ │ │ └── polymer2_typescript_components.adoc │ │ │ ├── polymer_build_and_structure.adoc │ │ │ ├── polymer_build_and_structure │ │ │ ├── polymer_directory_structure.adoc │ │ │ ├── polymer_hot_deploy.adoc │ │ │ └── polymer_tools.adoc │ │ │ ├── polymer_offline.adoc │ │ │ ├── polymer_requirements.adoc │ │ │ ├── polymer_styling.adoc │ │ │ ├── polymer_supported_browsers.adoc │ │ │ └── polymer_troubleshooting.adoc │ │ ├── client-react-native │ │ ├── images │ │ │ └── RNDemo.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── learning-path.adoc │ │ │ ├── starter-guide.adoc │ │ │ └── technologies.adoc │ │ ├── client-react │ │ ├── images │ │ │ ├── data-table-demo.gif │ │ │ ├── home-screen.png │ │ │ ├── login-screen.png │ │ │ ├── pet-clinic-browser.png │ │ │ ├── pet-clinic-editor.png │ │ │ ├── studio-adding-frontend-component.gif │ │ │ └── studio-create-front-module.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── backend-model.adoc │ │ │ ├── build.adoc │ │ │ ├── config.adoc │ │ │ ├── creating-react-components.adoc │ │ │ ├── forms.adoc │ │ │ ├── i18n.adoc │ │ │ ├── learning-path.adoc │ │ │ ├── mobx.adoc │ │ │ ├── routing.adoc │ │ │ ├── security.adoc │ │ │ ├── starter-guide.adoc │ │ │ ├── supported-browsers.adoc │ │ │ ├── sync-project-model.adoc │ │ │ ├── technologies.adoc │ │ │ └── theme.adoc │ │ ├── cuba-react-core │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── access-control.adoc │ │ │ ├── attr-perm-access-control.adoc │ │ │ ├── client-side-data-collection-store.adoc │ │ │ ├── cuba-app-provider.adoc │ │ │ ├── data-collection-store.adoc │ │ │ ├── data-instance-store.adoc │ │ │ ├── entity-perm-access-control.adoc │ │ │ ├── index.adoc │ │ │ ├── main-store.adoc │ │ │ ├── security.adoc │ │ │ └── specific-perm-access-control.adoc │ │ ├── cuba-react-ui │ │ ├── images │ │ │ └── FileUploadAndImagePreviewDemo.gif │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── data-table.adoc │ │ │ ├── entity-editor.adoc │ │ │ ├── entity-property.adoc │ │ │ ├── file-upload.adoc │ │ │ ├── form-field.adoc │ │ │ ├── image-preview.adoc │ │ │ ├── index.adoc │ │ │ ├── nested-entities-table-field.adoc │ │ │ └── nested-entity-field.adoc │ │ ├── cuba-rest-js │ │ ├── images │ │ │ ├── rest-access-role-attr-perms.jpg │ │ │ ├── rest-access-role-entity-perms.jpg │ │ │ └── rest-access-role.jpg │ │ ├── nav.adoc │ │ └── pages │ │ │ └── index.adoc │ │ ├── generator │ │ ├── images │ │ │ ├── browser-cards.png │ │ │ ├── browser-list.png │ │ │ ├── interactive-projects.png │ │ │ └── studio-integration.png │ │ ├── nav.adoc │ │ ├── pages │ │ │ ├── commands-reference.adoc │ │ │ └── index.adoc │ │ └── partials │ │ │ └── feat-available-in-studio.adoc │ │ ├── getting-started │ │ ├── nav.adoc │ │ └── pages │ │ │ ├── cli-specific-instructions.adoc │ │ │ ├── index.adoc │ │ │ └── learning-path.adoc │ │ ├── libs │ │ └── nav.adoc │ │ ├── overview │ │ ├── nav.adoc │ │ ├── pages │ │ │ └── index.adoc │ │ └── partials │ │ │ └── getting-started-note.adoc │ │ └── typescript-sdk │ │ ├── nav.adoc │ │ └── pages │ │ ├── entities.adoc │ │ ├── enums.adoc │ │ └── index.adoc ├── redirect-page-template.html └── supplemental-ui │ └── partials │ ├── LICENSE │ ├── footer-scripts.hbs │ ├── head-scripts.hbs │ ├── head-styles.hbs │ └── header-content.hbs ├── docs ├── .nojekyll └── index.html ├── lerna.json ├── package-lock.json ├── package.json ├── packages ├── cuba-react-core │ ├── .editorconfig │ ├── .gitignore │ ├── .snyk │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── babel.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── access-control │ │ │ ├── AccessControl.tsx │ │ │ ├── AttrPermAccessControl.tsx │ │ │ ├── EntityPermAccessControl.tsx │ │ │ └── SpecificPermAccessControl.tsx │ │ ├── app │ │ │ ├── CubaAppProvider.tsx │ │ │ ├── MainStore.ts │ │ │ ├── MenuConfig.ts │ │ │ ├── Security.test.ts │ │ │ └── Security.ts │ │ ├── data │ │ │ ├── Association.ts │ │ │ ├── Collection.test.tsx │ │ │ ├── Collection.tsx │ │ │ ├── DataContext.tsx │ │ │ ├── Instance.test.tsx │ │ │ └── Instance.tsx │ │ ├── index.ts │ │ └── util │ │ │ ├── collation.test.tsx │ │ │ ├── collation.ts │ │ │ ├── data.ts │ │ │ ├── errorHandling.ts │ │ │ ├── formats.ts │ │ │ ├── internal │ │ │ └── data.ts │ │ │ ├── metadata.ts │ │ │ ├── stateManagement.ts │ │ │ └── temporal.ts │ ├── tsconfig.json │ └── tslint.json ├── cuba-react-ui │ ├── .editorconfig │ ├── .gitignore │ ├── .snyk │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── babel.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── resolve-node-imports-in-less.js │ ├── rollup.config.js │ ├── src │ │ ├── errorHandling.test.ts │ │ ├── i18n │ │ │ ├── I18nProvider.tsx │ │ │ └── validation.tsx │ │ ├── index.less │ │ ├── index.ts │ │ ├── style │ │ │ └── palette.less │ │ ├── ui │ │ │ ├── EntityProperty.tsx │ │ │ ├── EntitySelectField.tsx │ │ │ ├── FileUpload.less │ │ │ ├── FileUpload.tsx │ │ │ ├── ImagePreview.less │ │ │ ├── ImagePreview.tsx │ │ │ ├── Msg.tsx │ │ │ ├── MultilineText.tsx │ │ │ ├── Spinner.less │ │ │ ├── Spinner.tsx │ │ │ ├── form │ │ │ │ ├── BigDecimalInput.tsx │ │ │ │ ├── DoubleInput.tsx │ │ │ │ ├── EntityEditor.less │ │ │ │ ├── FieldPermissionContainer.test.tsx │ │ │ │ ├── FieldPermssionContainer.tsx │ │ │ │ ├── Form.tsx │ │ │ │ ├── InputNumber.less │ │ │ │ ├── InputWithMask.tsx │ │ │ │ ├── IntegerInput.tsx │ │ │ │ ├── LongInput.tsx │ │ │ │ ├── NestedEntitiesTableField.less │ │ │ │ ├── NestedEntityField.less │ │ │ │ └── UuidInput.tsx │ │ │ ├── paging │ │ │ │ ├── Paging.test.tsx │ │ │ │ └── Paging.tsx │ │ │ └── table │ │ │ │ ├── DataTable.less │ │ │ │ ├── DataTable.tsx │ │ │ │ ├── DataTableCell.tsx │ │ │ │ ├── DataTableCustomFilter.less │ │ │ │ ├── DataTableCustomFilter.tsx │ │ │ │ ├── DataTableCustomFilterFields.tsx │ │ │ │ ├── DataTableFilterControlLayout.less │ │ │ │ ├── DataTableHelpers.tsx │ │ │ │ ├── DataTableIntervalEditor.less │ │ │ │ ├── DataTableIntervalEditor.tsx │ │ │ │ ├── DataTableIntervalFunctions.test.ts │ │ │ │ ├── DataTableIntervalFunctions.ts │ │ │ │ ├── DataTableListEditor.less │ │ │ │ └── DataTableListEditor.tsx │ │ └── util │ │ │ ├── errorHandling.ts │ │ │ ├── files.ts │ │ │ ├── formatting.test.ts │ │ │ ├── formatting.ts │ │ │ ├── mapCubaRestErrorToIntlId.ts │ │ │ ├── regex.test.ts │ │ │ └── regex.ts │ ├── tsconfig.json │ └── tslint.json ├── cuba-rest-js │ ├── .editorconfig │ ├── .gitignore │ ├── .npmignore │ ├── .snyk │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── examples │ │ ├── node │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ ├── package-lock.json │ │ │ └── package.json │ │ └── vanillajs-browser │ │ │ └── index.html │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── cuba.ts │ │ ├── error.ts │ │ ├── event_emitter.ts │ │ ├── filter.ts │ │ ├── model.ts │ │ ├── security.ts │ │ ├── storage.ts │ │ └── util.ts │ ├── test │ │ ├── common.js │ │ ├── cuba-app-lt-7-2.spec.js │ │ ├── cuba-app-not-logged.spec.js │ │ ├── cuba-app-security.spec.js │ │ ├── cuba-app.spec.js │ │ ├── cuba.spec.js │ │ ├── event_emitter.spec.js │ │ ├── security.spec.js │ │ ├── storage.spec.js │ │ └── utlil.spec.js │ ├── tsconfig.json │ └── tslint.json └── front-generator │ ├── .editorconfig │ ├── .gitignore │ ├── .npmignore │ ├── .nycrc.yaml │ ├── .snyk │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── bin │ └── gen-cuba-front.js │ ├── custom_types │ ├── inquirer-autocomplete-prompt.d.ts │ ├── rxjs.d.ts │ └── yeoman-environment.d.ts │ ├── package-lock.json │ ├── package.json │ ├── scripts │ └── copy-templates.js │ ├── src │ ├── cli.ts │ ├── common │ │ ├── base-generator.ts │ │ ├── cli-options.ts │ │ ├── constants.ts │ │ ├── model │ │ │ ├── cuba-model-utils.ts │ │ │ └── cuba-model.ts │ │ ├── questions.ts │ │ ├── studio │ │ │ ├── studio-integration.ts │ │ │ └── studio-model.ts │ │ ├── ts-helpers.ts │ │ ├── ts-shorthands.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── generators │ │ ├── polymer2-typescript │ │ │ ├── app │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── .package-lock.json │ │ │ │ │ ├── _gitignore │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── images │ │ │ │ │ ├── app-icon │ │ │ │ │ │ ├── icon-144x144.png │ │ │ │ │ │ ├── icon-192x192.png │ │ │ │ │ │ ├── icon-32x32.png │ │ │ │ │ │ ├── icon-48x48.png │ │ │ │ │ │ ├── icon-512x512.png │ │ │ │ │ │ ├── icon-64x64.png │ │ │ │ │ │ ├── icon-72x72.png │ │ │ │ │ │ └── icon-96x96.png │ │ │ │ │ └── favicon.ico │ │ │ │ │ ├── index.html │ │ │ │ │ ├── manifest.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── polymer.json │ │ │ │ │ ├── service-worker.js │ │ │ │ │ ├── src │ │ │ │ │ ├── ${project_namespace}-locale-select.html │ │ │ │ │ ├── ${project_namespace}-locale-select.ts │ │ │ │ │ ├── ${project_namespace}-login.html │ │ │ │ │ ├── ${project_namespace}-login.ts │ │ │ │ │ ├── ${project_namespace}-menu.html │ │ │ │ │ ├── ${project_namespace}-menu.ts │ │ │ │ │ ├── ${project_namespace}-shell.html │ │ │ │ │ ├── ${project_namespace}-shell.ts │ │ │ │ │ ├── ${project_namespace}-user-menu.html │ │ │ │ │ ├── ${project_namespace}-user-menu.ts │ │ │ │ │ ├── home │ │ │ │ │ │ ├── ${project_namespace}-home.html │ │ │ │ │ │ └── ${project_namespace}-home.ts │ │ │ │ │ ├── lumo-imports.html │ │ │ │ │ ├── material-imports.html │ │ │ │ │ └── shared-styles.html │ │ │ │ │ ├── sw-precache-config.js │ │ │ │ │ └── tsconfig.json │ │ │ ├── blank-component │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── component.html │ │ │ │ │ └── component.ts │ │ │ ├── common.ts │ │ │ ├── entity-cards │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── entity-cards.html │ │ │ │ │ └── entity-cards.ts │ │ │ ├── entity-edit │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── entity-edit.html │ │ │ │ │ └── entity-edit.ts │ │ │ ├── entity-list │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── entity-list.html │ │ │ │ │ └── entity-list.ts │ │ │ ├── entity-management │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── entity-management.html │ │ │ │ │ └── entity-management.ts │ │ │ └── info.json │ │ ├── polymer2 │ │ │ ├── app │ │ │ │ ├── index.ts │ │ │ │ ├── questions.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ ├── .package-lock.json │ │ │ │ │ ├── _gitignore │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── images │ │ │ │ │ ├── app-icon │ │ │ │ │ │ ├── icon-144x144.png │ │ │ │ │ │ ├── icon-192x192.png │ │ │ │ │ │ ├── icon-32x32.png │ │ │ │ │ │ ├── icon-48x48.png │ │ │ │ │ │ ├── icon-512x512.png │ │ │ │ │ │ ├── icon-64x64.png │ │ │ │ │ │ ├── icon-72x72.png │ │ │ │ │ │ └── icon-96x96.png │ │ │ │ │ └── favicon.ico │ │ │ │ │ ├── index.html │ │ │ │ │ ├── manifest.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── polymer.json │ │ │ │ │ ├── service-worker.js │ │ │ │ │ ├── src │ │ │ │ │ ├── ${project_namespace}-locale-select.html │ │ │ │ │ ├── ${project_namespace}-login.html │ │ │ │ │ ├── ${project_namespace}-menu.html │ │ │ │ │ ├── ${project_namespace}-shell.html │ │ │ │ │ ├── ${project_namespace}-user-menu.html │ │ │ │ │ ├── home │ │ │ │ │ │ └── ${project_namespace}-home.html │ │ │ │ │ ├── lumo-imports.html │ │ │ │ │ ├── material-imports.html │ │ │ │ │ └── shared-styles.html │ │ │ │ │ └── sw-precache-config.js │ │ │ ├── blank-component │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── component.html │ │ │ ├── common │ │ │ │ ├── fields │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rest-params.ts │ │ │ │ │ └── template │ │ │ │ │ │ ├── booleanField.html │ │ │ │ │ │ ├── dateField.html │ │ │ │ │ │ ├── dateTimeField.html │ │ │ │ │ │ ├── enumField.html │ │ │ │ │ │ ├── fileField.html │ │ │ │ │ │ ├── fpNumberField.html │ │ │ │ │ │ ├── lookupField.html │ │ │ │ │ │ ├── numberField.html │ │ │ │ │ │ ├── textField.html │ │ │ │ │ │ └── timeField.html │ │ │ │ └── template-model.ts │ │ │ ├── entity-cards │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── entity-cards.html │ │ │ ├── entity-edit │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── entity-edit.html │ │ │ ├── entity-list │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── entity-list.html │ │ │ ├── entity-management │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── entity-management.html │ │ │ ├── info.json │ │ │ ├── query-results │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── query-result-list.html │ │ │ ├── service-data │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── service-data.html │ │ │ └── service-form │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ └── service-form.html │ │ ├── react-native │ │ │ ├── app │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── .env │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── App.tsx │ │ │ │ │ ├── README.md │ │ │ │ │ ├── app.json │ │ │ │ │ ├── assets │ │ │ │ │ ├── icon.png │ │ │ │ │ └── splash.png │ │ │ │ │ ├── babel.config.js │ │ │ │ │ ├── components │ │ │ │ │ ├── Example.tsx │ │ │ │ │ ├── Login.tsx │ │ │ │ │ ├── PrimaryButton.tsx │ │ │ │ │ └── Root.tsx │ │ │ │ │ ├── package.json │ │ │ │ │ ├── rest │ │ │ │ │ ├── errorCodes.ts │ │ │ │ │ └── rest.ts │ │ │ │ │ ├── styles │ │ │ │ │ └── palette.ts │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ └── util │ │ │ │ │ └── base64.ts │ │ │ └── info.json │ │ ├── react-typescript │ │ │ ├── app │ │ │ │ ├── index.ts │ │ │ │ ├── shared.ts │ │ │ │ └── template │ │ │ │ │ ├── .editorconfig │ │ │ │ │ ├── .env.development.local │ │ │ │ │ ├── .env.production.local │ │ │ │ │ ├── README.md │ │ │ │ │ ├── _editorconfig │ │ │ │ │ ├── _gitignore │ │ │ │ │ ├── i18n-message-packs │ │ │ │ │ ├── en.json │ │ │ │ │ ├── fr.json │ │ │ │ │ ├── ru.json │ │ │ │ │ └── zh-cn.json │ │ │ │ │ ├── images.d.ts │ │ │ │ │ ├── package-lock.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── public │ │ │ │ │ ├── index.html │ │ │ │ │ └── manifest.json │ │ │ │ │ ├── src │ │ │ │ │ ├── app │ │ │ │ │ │ ├── App.css │ │ │ │ │ │ ├── App.test.tsx │ │ │ │ │ │ ├── App.tsx │ │ │ │ │ │ ├── CenteredLoader.css │ │ │ │ │ │ ├── CenteredLoader.tsx │ │ │ │ │ │ ├── common │ │ │ │ │ │ │ ├── Centered.css │ │ │ │ │ │ │ └── Centered.tsx │ │ │ │ │ │ ├── header │ │ │ │ │ │ │ ├── AppHeader.css │ │ │ │ │ │ │ ├── AppHeader.tsx │ │ │ │ │ │ │ └── logo.png │ │ │ │ │ │ ├── home │ │ │ │ │ │ │ └── HomePage.tsx │ │ │ │ │ │ └── login │ │ │ │ │ │ │ ├── Login.css │ │ │ │ │ │ │ ├── Login.tsx │ │ │ │ │ │ │ └── logo.png │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── i18n │ │ │ │ │ │ ├── LanguageSwitcher.css │ │ │ │ │ │ ├── LanguageSwitcher.tsx.ejs │ │ │ │ │ │ ├── i18nMappings.ts.ejs │ │ │ │ │ │ └── localeCaptions.ts.ejs │ │ │ │ │ ├── index.css │ │ │ │ │ ├── index.tsx.ejs │ │ │ │ │ ├── react-app-env.d.ts │ │ │ │ │ ├── registerServiceWorker.ts │ │ │ │ │ └── routing.ts │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ ├── tsconfig.prod.json │ │ │ │ │ ├── tsconfig.test.json │ │ │ │ │ └── tslint.json │ │ │ ├── blank-component │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ └── template │ │ │ │ │ └── Component.tsx │ │ │ ├── common │ │ │ │ ├── base-entity-screen-generator │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── params.ts │ │ │ │ │ └── template-model.ts │ │ │ │ ├── entity.ts │ │ │ │ ├── i18n.ts │ │ │ │ ├── menu.ts │ │ │ │ ├── questions.ts │ │ │ │ └── template-model.ts │ │ │ ├── entity-cards │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ └── EntityCards.tsx.ejs │ │ │ ├── entity-management-hooks │ │ │ │ ├── index.ts │ │ │ │ └── template │ │ │ │ │ ├── Cards.tsx.ejs │ │ │ │ │ ├── EntityManagement.tsx.ejs │ │ │ │ │ ├── EntityManagementEditor.tsx.ejs │ │ │ │ │ ├── List.tsx.ejs │ │ │ │ │ └── Table.tsx.ejs │ │ │ ├── entity-management │ │ │ │ ├── entity-management-en.json │ │ │ │ ├── entity-management-fr.json │ │ │ │ ├── entity-management-ru.json │ │ │ │ ├── entity-management-zh-cn.json │ │ │ │ ├── index.ts │ │ │ │ ├── params.ts │ │ │ │ ├── shared.ts │ │ │ │ ├── template-model.ts │ │ │ │ └── template │ │ │ │ │ ├── Cards.tsx.ejs │ │ │ │ │ ├── EntityManagement.tsx.ejs │ │ │ │ │ ├── EntityManagementEditor.tsx.ejs │ │ │ │ │ ├── List.tsx.ejs │ │ │ │ │ └── Table.tsx.ejs │ │ │ └── info.json │ │ └── sdk │ │ │ ├── README.md │ │ │ ├── all │ │ │ └── index.ts │ │ │ ├── import-utils.ts │ │ │ ├── info.json │ │ │ ├── model │ │ │ ├── entities-generation.ts │ │ │ ├── entity-views-generation.ts │ │ │ ├── enums-generation.ts │ │ │ ├── index.ts │ │ │ └── model-utils.ts │ │ │ ├── sdk-generator.ts │ │ │ └── services │ │ │ ├── method-params-type.ts │ │ │ ├── queries-generation.ts │ │ │ └── services-generation.ts │ ├── index.ts │ ├── init.ts │ ├── list.ts │ └── test │ │ ├── common │ │ ├── base-generator.test.ts │ │ ├── cli-options.test.ts │ │ ├── model │ │ │ └── cuba-model-utils.test.ts │ │ ├── questions.test.ts │ │ └── test-utils.ts │ │ ├── fixtures │ │ ├── answers.json │ │ ├── answers │ │ │ ├── hooks-management-cards.json │ │ │ ├── hooks-management-list.json │ │ │ ├── hooks-management-table.json │ │ │ ├── int-id-management-table.json │ │ │ ├── string-id-management-table-explicit-id-name.json │ │ │ ├── string-id-management-table-no-id-name.json │ │ │ ├── string-id-management-table-unexistent-id-name.json │ │ │ └── string-id-management-table.json │ │ ├── base-entity-model.json │ │ ├── entity-model--association-o2o.json │ │ ├── entity-model--datatypes-test-entity.json │ │ ├── entity-model-favourite-car.json │ │ ├── entity-model.json │ │ ├── enums-model--identical-names.json │ │ ├── enums-model.json │ │ ├── mpg-projectModel.json │ │ ├── project-model--scr-no-id-attr.json │ │ ├── project-model--scr.json │ │ ├── query-model-car.json │ │ ├── query-model-full.json │ │ ├── query-model-overloads.json │ │ ├── react-client │ │ │ ├── .env.development.local │ │ │ ├── .env.production.local │ │ │ └── src │ │ │ │ ├── app │ │ │ │ ├── component │ │ │ │ │ └── BlankComponent.tsx │ │ │ │ ├── entity-cards │ │ │ │ │ └── MpgFavoriteCarCards.tsx │ │ │ │ └── entity-management │ │ │ │ │ ├── CarCards.tsx │ │ │ │ │ ├── CarEdit.tsx │ │ │ │ │ ├── CarEditLowCase.tsx │ │ │ │ │ ├── CarList.tsx │ │ │ │ │ ├── CarManagement.tsx │ │ │ │ │ ├── CarManagementLowCase.tsx │ │ │ │ │ ├── CarTable.tsx │ │ │ │ │ ├── CarTableLowCase.tsx │ │ │ │ │ ├── HooksEMCardsBrowse.tsx │ │ │ │ │ ├── HooksEMCardsEdit.tsx │ │ │ │ │ ├── HooksEMCardsMgt.tsx │ │ │ │ │ ├── HooksEMListBrowse.tsx │ │ │ │ │ ├── HooksEMListEdit.tsx │ │ │ │ │ ├── HooksEMListMgt.tsx │ │ │ │ │ ├── HooksEMTableBrowse.tsx │ │ │ │ │ ├── HooksEMTableEdit.tsx │ │ │ │ │ ├── HooksEMTableMgt.tsx │ │ │ │ │ ├── StringIdMgtTableBrowse.tsx │ │ │ │ │ ├── StringIdMgtTableEdit.tsx │ │ │ │ │ └── StringIdMgtTableManagement.tsx │ │ │ │ └── index.tsx │ │ ├── react-native-client │ │ │ └── components │ │ │ │ └── Root.tsx │ │ ├── service-model.json │ │ ├── templates │ │ │ ├── EntityManagementEditor.tsx │ │ │ ├── i18nMappings.ts │ │ │ └── i18nMappings.ts.ejs │ │ ├── view-properties--association-o2o.json │ │ └── view-properties--datatypes-test-entity.json │ │ ├── generator.test.ts │ │ ├── generators │ │ ├── polymer2 │ │ │ └── polymer2-generator.test.ts │ │ ├── react-native │ │ │ └── react-native-generator.test.ts │ │ ├── react-typrscript │ │ │ ├── common │ │ │ │ ├── base-entity-screen-generator │ │ │ │ │ └── index.test.ts │ │ │ │ ├── entity.test.ts │ │ │ │ └── i18n.test.ts │ │ │ ├── entity-management │ │ │ │ └── index.test.ts │ │ │ ├── react-generator-process-templates.test.ts │ │ │ └── react-generator.test.ts │ │ └── sdk │ │ │ ├── model │ │ │ ├── entities-generation.test.ts │ │ │ └── enums-generation.test.ts │ │ │ ├── sdk-generator.test.ts │ │ │ └── services │ │ │ ├── method-params-type.test.ts │ │ │ ├── queries-generation.test.ts │ │ │ └── services-generation.test.ts │ │ ├── init.test.ts │ │ ├── list.test.ts │ │ ├── studio-integration.test.ts │ │ ├── test-commons.ts │ │ └── utils.test.ts │ ├── test │ ├── e2e │ │ ├── e2e-common.js │ │ ├── expect │ │ │ ├── entities │ │ │ │ ├── ScrUserInfo.ts │ │ │ │ ├── scr$Car.ts │ │ │ │ └── scr$SparePart.ts │ │ │ ├── enums │ │ │ │ └── enums.ts │ │ │ ├── queries.ts │ │ │ └── services.ts │ │ ├── fixtures │ │ │ ├── polymer-client │ │ │ │ └── answers.json │ │ │ ├── projectModel-empty.json │ │ │ ├── projectModel-new.json │ │ │ ├── projectModel-scr.json │ │ │ ├── react-client │ │ │ │ └── answers.json │ │ │ └── sdk │ │ │ │ └── tsconfig.json │ │ ├── polymer2-ts.test.js │ │ ├── polymer2.test.js │ │ ├── react-client--empty-model.test.js │ │ ├── react-client--new-project.test.js │ │ └── sdk.test.js │ └── mocha.opts │ ├── tsconfig.declarations.json │ ├── tsconfig.json │ └── tsconfig_strict.json ├── sample-car-rent-7-1 ├── .gitignore ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── modules │ ├── core │ │ ├── db │ │ │ └── init │ │ │ │ └── postgres │ │ │ │ ├── 10.create-db.sql │ │ │ │ ├── 20.create-db.sql │ │ │ │ └── 30.create-db.sql │ │ ├── src │ │ │ └── com │ │ │ │ └── company │ │ │ │ └── scr │ │ │ │ ├── app.properties │ │ │ │ ├── service │ │ │ │ └── FavoriteServiceBean.java │ │ │ │ └── spring.xml │ │ ├── test │ │ │ └── com │ │ │ │ └── company │ │ │ │ └── scr │ │ │ │ ├── ScrTestContainer.java │ │ │ │ └── core │ │ │ │ └── SampleIntegrationTest.java │ │ └── web │ │ │ ├── META-INF │ │ │ └── context.xml │ │ │ └── WEB-INF │ │ │ └── web.xml │ ├── global │ │ └── src │ │ │ └── com │ │ │ └── company │ │ │ └── scr │ │ │ ├── entity │ │ │ ├── Car.java │ │ │ ├── CarRent.java │ │ │ ├── CarType.java │ │ │ ├── EcoRank.java │ │ │ ├── FavoriteCar.java │ │ │ ├── Garage.java │ │ │ ├── ScrUser.java │ │ │ ├── ScrUserInfo.java │ │ │ ├── SparePart.java │ │ │ ├── SparePartO2M.java │ │ │ ├── SparePartO2O.java │ │ │ ├── TechnicalCertificate.java │ │ │ ├── constraints │ │ │ │ ├── PurchasedAfterManufactured.java │ │ │ │ ├── PurchasedAfterManufacturedValidator.java │ │ │ │ ├── ReliabilityPolicyCompliant.java │ │ │ │ ├── ReliabilityPolicyCompliantValidator.java │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── messages.properties │ │ │ └── messages_ru.properties │ │ │ ├── metadata.xml │ │ │ ├── persistence.xml │ │ │ ├── service │ │ │ └── FavoriteService.java │ │ │ └── views.xml │ └── web │ │ ├── src │ │ └── com │ │ │ └── company │ │ │ └── scr │ │ │ ├── web-app.properties │ │ │ ├── web-dispatcher-spring.xml │ │ │ ├── web-menu.xml │ │ │ ├── web-permissions.xml │ │ │ ├── web-screens.xml │ │ │ ├── web-spring.xml │ │ │ └── web │ │ │ ├── messages.properties │ │ │ └── screens │ │ │ ├── car │ │ │ ├── CarBrowse.java │ │ │ ├── CarEdit.java │ │ │ ├── car-browse.xml │ │ │ ├── car-edit.xml │ │ │ └── messages.properties │ │ │ ├── favoritecar │ │ │ ├── FavoriteCarBrowse.java │ │ │ ├── FavoriteCarEdit.java │ │ │ ├── favorite-car-browse.xml │ │ │ ├── favorite-car-edit.xml │ │ │ └── messages.properties │ │ │ └── garage │ │ │ ├── GarageBrowse.java │ │ │ ├── GarageEdit.java │ │ │ ├── garage-browse.xml │ │ │ ├── garage-edit.xml │ │ │ └── messages.properties │ │ └── web │ │ ├── META-INF │ │ └── context.xml │ │ └── WEB-INF │ │ └── web.xml └── settings.gradle ├── sample-car-rent ├── .gitignore ├── README.md ├── build.gradle ├── extra.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── modules │ ├── core │ │ ├── db │ │ │ └── init │ │ │ │ └── postgres │ │ │ │ ├── 10.create-db.sql │ │ │ │ ├── 20.create-db.sql │ │ │ │ └── 30.create-db.sql │ │ ├── src │ │ │ └── com │ │ │ │ └── company │ │ │ │ └── scr │ │ │ │ ├── app.properties │ │ │ │ ├── core │ │ │ │ ├── FakeDataGenerator.java │ │ │ │ ├── FakeDataGeneratorImpl.java │ │ │ │ ├── FakeDataGeneratorMBean.java │ │ │ │ └── FakeDataGeneratorMBeanImpl.java │ │ │ │ ├── security │ │ │ │ ├── GenericUiManagersRole.java │ │ │ │ ├── GenericUiMechanicsRole.java │ │ │ │ ├── RestAdminsRole.java │ │ │ │ ├── RestManagersRole.java │ │ │ │ └── RestMechanicsRole.java │ │ │ │ ├── service │ │ │ │ └── FavoriteServiceBean.java │ │ │ │ └── spring.xml │ │ └── web │ │ │ ├── META-INF │ │ │ └── context.xml │ │ │ └── WEB-INF │ │ │ └── web.xml │ ├── global │ │ └── src │ │ │ └── com │ │ │ └── company │ │ │ └── scr │ │ │ ├── entity │ │ │ ├── Car.java │ │ │ ├── CarRent.java │ │ │ ├── CarType.java │ │ │ ├── EcoRank.java │ │ │ ├── FavoriteCar.java │ │ │ ├── Garage.java │ │ │ ├── ScrUser.java │ │ │ ├── ScrUserInfo.java │ │ │ ├── SparePart.java │ │ │ ├── TechnicalCertificate.java │ │ │ ├── constraints │ │ │ │ ├── PurchasedAfterManufactured.java │ │ │ │ ├── PurchasedAfterManufacturedValidator.java │ │ │ │ ├── ReliabilityPolicyCompliant.java │ │ │ │ ├── ReliabilityPolicyCompliantValidator.java │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── messages.properties │ │ │ ├── messages_ru.properties │ │ │ └── test │ │ │ │ ├── AssociationM2MTestEntity.java │ │ │ │ ├── AssociationM2OTestEntity.java │ │ │ │ ├── AssociationO2MTestEntity.java │ │ │ │ ├── AssociationO2OTestEntity.java │ │ │ │ ├── BoringStringIdTestEntity.java │ │ │ │ ├── CompositeAttribute.java │ │ │ │ ├── CompositeKeyEntity.java │ │ │ │ ├── CompositionO2MTestEntity.java │ │ │ │ ├── CompositionO2OTestEntity.java │ │ │ │ ├── DatatypesTestEntity.java │ │ │ │ ├── DatatypesTestEntity2.java │ │ │ │ ├── DatatypesTestEntity3.java │ │ │ │ ├── DeeplyNestedTestEntity.java │ │ │ │ ├── IntIdentityIdTestEntity.java │ │ │ │ ├── IntegerIdTestEntity.java │ │ │ │ ├── StringIdTestEntity.java │ │ │ │ ├── TestEnum.java │ │ │ │ ├── WeirdStringIdTestEntity.java │ │ │ │ └── messages.properties │ │ │ ├── metadata.xml │ │ │ ├── persistence.xml │ │ │ ├── service │ │ │ └── FavoriteService.java │ │ │ └── views.xml │ ├── gui │ │ └── src │ │ │ └── com │ │ │ └── company │ │ │ └── scr │ │ │ ├── gui │ │ │ └── messages.properties │ │ │ └── screens.xml │ ├── portal │ │ ├── src │ │ │ └── com │ │ │ │ └── company │ │ │ │ └── scr │ │ │ │ ├── portal-app.properties │ │ │ │ ├── portal-dispatcher-spring.xml │ │ │ │ ├── portal-security-spring.xml │ │ │ │ ├── portal-spring.xml │ │ │ │ └── portal │ │ │ │ ├── command │ │ │ │ └── LoginUserCommand.java │ │ │ │ ├── controllers │ │ │ │ ├── LoginController.java │ │ │ │ └── PortalController.java │ │ │ │ └── messages.properties │ │ └── web │ │ │ ├── META-INF │ │ │ └── context.xml │ │ │ ├── WEB-INF │ │ │ ├── templates │ │ │ │ ├── error │ │ │ │ │ ├── 404.html │ │ │ │ │ └── 500.html │ │ │ │ ├── index.html │ │ │ │ ├── login.html │ │ │ │ └── maintain.html │ │ │ └── web.xml │ │ │ └── resources │ │ │ ├── css │ │ │ └── common.css │ │ │ └── favicon.ico │ ├── readme.md │ └── web │ │ ├── src │ │ └── com │ │ │ └── company │ │ │ └── scr │ │ │ ├── rest-queries.xml │ │ │ ├── rest-services.xml │ │ │ ├── web-app.properties │ │ │ ├── web-dispatcher-spring.xml │ │ │ ├── web-menu.xml │ │ │ ├── web-permissions.xml │ │ │ ├── web-screens.xml │ │ │ ├── web-spring.xml │ │ │ └── web │ │ │ ├── ScrApp.java │ │ │ ├── car │ │ │ ├── CarBrowse.java │ │ │ ├── CarEdit.java │ │ │ ├── car-browse.xml │ │ │ ├── car-edit.xml │ │ │ └── messages.properties │ │ │ ├── carrent │ │ │ ├── CarRentBrowse.java │ │ │ ├── car-rent-browse.xml │ │ │ └── messages.properties │ │ │ ├── favoritecar │ │ │ ├── FavoriteCarBrowse.java │ │ │ ├── favorite-car-browse.xml │ │ │ └── messages.properties │ │ │ ├── garage │ │ │ ├── GarageBrowse.java │ │ │ ├── GarageEdit.java │ │ │ ├── garage-browse.xml │ │ │ ├── garage-edit.xml │ │ │ └── messages.properties │ │ │ ├── messages.properties │ │ │ ├── messages_ru.properties │ │ │ ├── screens │ │ │ ├── associationm2mtestentity │ │ │ │ ├── AssociationM2MTestEntityBrowse.java │ │ │ │ ├── AssociationM2MTestEntityEdit.java │ │ │ │ ├── association-m2m-test-entity-browse.xml │ │ │ │ ├── association-m2m-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── associationm2otestentity │ │ │ │ ├── AssociationM2OTestEntityBrowse.java │ │ │ │ ├── AssociationM2OTestEntityEdit.java │ │ │ │ ├── association-m2o-test-entity-browse.xml │ │ │ │ ├── association-m2o-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── associationo2mtestentity │ │ │ │ ├── AssociationO2MTestEntityBrowse.java │ │ │ │ ├── AssociationO2MTestEntityEdit.java │ │ │ │ ├── association-o2m-test-entity-browse.xml │ │ │ │ ├── association-o2m-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── associationo2otestentity │ │ │ │ ├── AssociationO2OTestEntityBrowse.java │ │ │ │ ├── AssociationO2OTestEntityEdit.java │ │ │ │ ├── association-o2o-test-entity-browse.xml │ │ │ │ ├── association-o2o-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── compositekeyentity │ │ │ │ ├── CompositeKeyEntityBrowse.java │ │ │ │ ├── CompositeKeyEntityEdit.java │ │ │ │ ├── composite-key-entity-browse.xml │ │ │ │ └── composite-key-entity-edit.xml │ │ │ ├── compositiono2mtestentity │ │ │ │ ├── CompositionO2MTestEntityBrowse.java │ │ │ │ ├── CompositionO2MTestEntityEdit.java │ │ │ │ ├── composition-o2m-test-entity-browse.xml │ │ │ │ ├── composition-o2m-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── compositiono2otestentity │ │ │ │ ├── CompositionO2OTestEntityBrowse.java │ │ │ │ ├── CompositionO2OTestEntityEdit.java │ │ │ │ ├── composition-o2o-test-entity-browse.xml │ │ │ │ ├── composition-o2o-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── datatypestestentity │ │ │ │ ├── DatatypesTestEntityBrowse.java │ │ │ │ ├── DatatypesTestEntityEdit.java │ │ │ │ ├── datatypes-test-entity-browse.xml │ │ │ │ ├── datatypes-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── datatypestestentity2 │ │ │ │ ├── DatatypesTestEntity2Browse.java │ │ │ │ ├── DatatypesTestEntity2Edit.java │ │ │ │ ├── datatypes-test-entity2-browse.xml │ │ │ │ ├── datatypes-test-entity2-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── datatypestestentity3 │ │ │ │ ├── DatatypesTestEntity3Browse.java │ │ │ │ ├── DatatypesTestEntity3Edit.java │ │ │ │ ├── datatypes-test-entity3-browse.xml │ │ │ │ ├── datatypes-test-entity3-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── deeplynestedtestentity │ │ │ │ ├── DeeplyNestedTestEntityBrowse.java │ │ │ │ ├── DeeplyNestedTestEntityEdit.java │ │ │ │ ├── deeply-nested-test-entity-browse.xml │ │ │ │ ├── deeply-nested-test-entity-edit.xml │ │ │ │ ├── messages.properties │ │ │ │ └── messages_ru.properties │ │ │ ├── sparepart │ │ │ │ ├── SparePartBrowse.java │ │ │ │ ├── SparePartEdit.java │ │ │ │ ├── messages.properties │ │ │ │ ├── messages_ru.properties │ │ │ │ ├── spare-part-browse.xml │ │ │ │ └── spare-part-edit.xml │ │ │ └── stringidtestentity │ │ │ │ ├── StringIdTestEntityBrowse.java │ │ │ │ ├── StringIdTestEntityEdit.java │ │ │ │ ├── messages.properties │ │ │ │ ├── messages_ru.properties │ │ │ │ ├── string-id-test-entity-browse.xml │ │ │ │ └── string-id-test-entity-edit.xml │ │ │ └── technicalcertificate │ │ │ ├── TechnicalCertificateBrowse.java │ │ │ ├── messages.properties │ │ │ └── technical-certificate-browse.xml │ │ ├── themes │ │ └── halo │ │ │ ├── branding │ │ │ ├── app-icon-login.png │ │ │ └── app-icon-menu.png │ │ │ ├── com.company.scr │ │ │ ├── app-component.scss │ │ │ ├── halo-ext-defaults.scss │ │ │ └── halo-ext.scss │ │ │ ├── favicon.ico │ │ │ └── styles.scss │ │ └── web │ │ ├── META-INF │ │ └── context.xml │ │ └── WEB-INF │ │ └── web.xml ├── settings.gradle ├── studio-intellij.xml └── studio-settings.xml ├── scripts ├── audit │ └── snyk.js ├── ci-bootstrap-backend.js ├── common.js ├── docs │ ├── generate-docs-site.js │ └── update-docs-src.js ├── generate-client-scr.js ├── generate-react-client-scr.js ├── generate-react-native-client-scr.js ├── model │ ├── projectModel-scr.json │ └── react-client-scr-answers.json ├── pack-client-libs.js ├── pack-given-client-libs.js ├── pack-react-client-libs.js ├── pack-react-native-client-libs.js ├── run-gradle.js ├── screens │ ├── boring-string-id-management-table.json │ ├── composite-key-entity-management-cards.json │ ├── composite-key-entity-management-list.json │ ├── composite-key-entity-management-table.json │ ├── hooks-management-cards.json │ ├── hooks-management-list.json │ ├── hooks-management-table.json │ ├── int-id-management-cards.json │ ├── int-id-management-list.json │ ├── int-id-management-table.json │ ├── int-identity-id-cards.json │ ├── int-identity-id-management-cards.json │ ├── int-identity-id-management-list.json │ ├── int-identity-id-management-table.json │ ├── string-id-cards.json │ ├── string-id-management-cards.json │ ├── string-id-management-list.json │ ├── string-id-management-table.json │ ├── weird-string-id-management-cards.json │ ├── weird-string-id-management-list.json │ └── weird-string-id-management-table.json ├── update-client-libs.js ├── update-given-client-libs.js ├── update-react-client-libs.js └── update-react-native-client-libs.js ├── test-pup ├── babel.config.js ├── common │ ├── login-to-scr.js │ └── paging.js ├── jest.config.js ├── package-lock.json ├── package.json ├── react-client-scr-71 │ └── car-editor-security.test.js └── react-client-scr │ ├── app-start.test.js │ ├── car-browse-cards-paging.test.js │ ├── car-browse-components.test.js │ ├── car-browse-list-paging.test.js │ ├── car-editor-security.test.js │ └── data-table │ └── data-table-custom-filter │ ├── FilterActions.js │ ├── data-table-filters-association-m2o.test.js │ ├── data-table-filters-association-o2o.test.js │ ├── data-table-filters-bigdecimal.test.js │ ├── data-table-filters-boolean.test.js │ ├── data-table-filters-composition-o2o.test.js │ ├── data-table-filters-date.test.js │ ├── data-table-filters-datetime.test.js │ ├── data-table-filters-double.test.js │ ├── data-table-filters-integer.test.js │ ├── data-table-filters-localdate.test.js │ ├── data-table-filters-localdatetime.test.js │ ├── data-table-filters-localtime.test.js │ ├── data-table-filters-long.test.js │ ├── data-table-filters-offsetdatetime.test.js │ ├── data-table-filters-offsettime.test.js │ ├── data-table-filters-string.test.js │ ├── data-table-filters-time.test.js │ ├── data-table-filters-uuid.test.js │ └── data-table-no-filters.test.js └── travis └── push-client-builds.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | # Exclude docs folder from GitHub language statistics 2 | docs/** linguist-documentation 3 | docs-src/** linguist-documentation 4 | docs-src-cn/** linguist-documentation 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | react-client-scr/** 4 | react-native-client-scr/** 5 | docs-build*/** 6 | _testgen/** -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/.nojekyll -------------------------------------------------------------------------------- /.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. 2 | version: v1.13.5 3 | ignore: {} 4 | patch: {} 5 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'], 3 | rules: { 4 | 'scope-enum': [2, 'always', [ 5 | 'React', 'React Native', 'SDK', 6 | 'DataTable', 'Front Generator', 7 | 'deps', 'deps-dev' 8 | ]], 9 | 'scope-case': [0], 10 | 'type-enum': [2, 'always', [ 11 | 'feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore', 'revert', 'WIP' 12 | ]], 13 | 'type-case': [0], 14 | 'header-max-length': [2, 'always', 100] 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-core/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-core/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-core/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-core/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-core/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-core/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-core/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-core/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-ui/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-ui/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-ui/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-ui/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-ui/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-ui/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-react-ui/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-react-ui/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-rest-js/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-rest-js/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-rest-js/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-rest-js/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-rest-js/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-rest-js/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src-cn/api-reference/cuba-rest-js/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/api-reference/cuba-rest-js/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/antora.yml: -------------------------------------------------------------------------------- 1 | name: cuba-frontend-docs 2 | title: CUBA 前端 UI 开发手册 3 | version: v20.1 4 | nav: 5 | - modules/overview/nav.adoc 6 | - modules/getting-started/nav.adoc 7 | - modules/client-react/nav.adoc 8 | - modules/client-react-native/nav.adoc 9 | - modules/client-polymer/nav.adoc 10 | - modules/cuba-react-core/nav.adoc 11 | - modules/cuba-react-ui/nav.adoc 12 | - modules/typescript-sdk/nav.adoc 13 | - modules/generator/nav.adoc 14 | - modules/cuba-rest-js/nav.adoc 15 | - modules/libs/nav.adoc 16 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[Polymer Client (Deprecated)] 2 | ** xref:polymer/polymer_requirements.adoc[Requirements] 3 | ** xref:polymer/polymer_supported_browsers.adoc[Supported Browsers] 4 | ** xref:polymer/polymer_build_and_structure.adoc[Build System and Project Structure] 5 | ** xref:polymer/cuba_web_components.adoc[CUBA Web Components] 6 | ** xref:polymer/polymer_styling.adoc[Styling] 7 | ** xref:polymer/polymer_offline.adoc[Offline Capabilities] 8 | ** xref:polymer/polymer2_typescript/polymer2_typescript.adoc[TypeScript Support] 9 | ** xref:polymer/polymer_troubleshooting.adoc[Troubleshooting] 10 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/pages/polymer/cuba_web_components.adoc: -------------------------------------------------------------------------------- 1 | = CUBA Web Components 2 | 3 | The detailed API reference of CUBA elements can be found https://cuba-elements.github.io/cuba-elements/[here]. 4 | 5 | include::cuba_web_components/polymer_inintialization.adoc[leveloffset=+1] 6 | 7 | include::cuba_web_components/polymer_working_with_data.adoc[leveloffset=+1] 8 | 9 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/pages/polymer/cuba_web_components/polymer_inintialization.adoc: -------------------------------------------------------------------------------- 1 | = Initialization 2 | 3 | In order to use any `cuba-` element you need to initialize common library and connection to the REST API using `cuba-app` element : 4 | 5 | [source,html] 6 | ---- 7 | 8 | ---- 9 | 10 | It should be placed once in your app as early as possible. Do not change properties dynamically or detach/attach the element after initialization. 11 | 12 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/pages/polymer/polymer_requirements.adoc: -------------------------------------------------------------------------------- 1 | = Requirements 2 | 3 | http://git-scm.com/downloads[Git] should be installed and available from the command line. 4 | It’s required for https://bower.io/[bower] - the package manager for front-end applications. 5 | 6 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/pages/polymer/polymer_styling.adoc: -------------------------------------------------------------------------------- 1 | = Styling 2 | 3 | See the Polymer's https://www.polymer-project.org/2.0/docs/devguide/style-shadow-dom[styling guide]. The most noticeable difference between traditional approach is how global styles are specified. 4 | Since Polymer elements use Shadow DOM global styles do not leak inside the components. You need to use https://www.polymer-project.org/2.0/docs/devguide/style-shadow-dom#style-modules[style-modules] instead. There is a `shares-styles.html` file in Polymer client which is automatically being imported to any new component created in Studio. 5 | 6 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-polymer/pages/polymer/polymer_supported_browsers.adoc: -------------------------------------------------------------------------------- 1 | = Supported Browsers 2 | 3 | See the list of supported browsers on the Polymer’s https://polymer-library.polymer-project.org/2.0/docs/browsers[website] 4 | 5 | [WARNING] 6 | ==== 7 | Please do not to use Polymer client if you are targeting legacy browsers. 8 | ==== 9 | 10 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react-native/images/RNDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react-native/images/RNDemo.gif -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react-native/nav.adoc: -------------------------------------------------------------------------------- 1 | * React Native Client 2 | ** xref:starter-guide.adoc[开始使用 React Native Client] 3 | ** xref:technologies.adoc[技术概览] 4 | ** xref:learning-path.adoc[然后怎么办?] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react-native/pages/learning-path.adoc: -------------------------------------------------------------------------------- 1 | = 然后怎么办? 2 | 3 | 查阅 xref:cuba-react-core:index.adoc[CUBA React Core] 章节了解可用的组件以及如何使用。 4 | 5 | 查阅 {api_rest}[CUBA REST JS] 了解您的组件如何与 {manual_restApi}[Generic REST API] 通信。 6 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react-native/pages/technologies.adoc: -------------------------------------------------------------------------------- 1 | = 技术概览 2 | 3 | React Native client 基于下面的框架和库开发: 4 | 5 | * https://facebook.github.io/react-native/[React Native] - UI 渲染 6 | * https://mobx.js.org/[MobX] - 响应式状态管理 7 | * xref:cuba-react-core:index.adoc[CUBA React Core] - CUBA React core 组件和工具 8 | * {api_rest}[CUBA REST JS] - 与 СUBA 通用 REST API 交互 9 | * https://expo.io/[Expo] - React Native 的开发工具 10 | 11 | React Native client 使用 link:https://www.typescriptlang.org/[TypeScript] 开发。 12 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/data-table-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/data-table-demo.gif -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/home-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/home-screen.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/login-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/login-screen.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/pet-clinic-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/pet-clinic-browser.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/pet-clinic-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/pet-clinic-editor.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/studio-adding-frontend-component.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/studio-adding-frontend-component.gif -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/images/studio-create-front-module.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/client-react/images/studio-create-front-module.gif -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/nav.adoc: -------------------------------------------------------------------------------- 1 | * React Client 2 | ** xref:starter-guide.adoc[开始使用 React Client] 3 | ** xref:learning-path.adoc[然后怎么办?] 4 | ** xref:technologies.adoc[技术概览] 5 | ** xref:supported-browsers.adoc[支持的浏览器] 6 | ** xref:creating-react-components.adoc[创建 React 组件] 7 | ** xref:mobx.adoc[MobX 处理 Observable State] 8 | ** xref:routing.adoc[路由和目录] 9 | ** xref:forms.adoc[表单] 10 | ** xref:i18n.adoc[国际化] 11 | ** xref:theme.adoc[自定义主题] 12 | ** xref:backend-model.adoc[后端模型] 13 | ** xref:sync-project-model.adoc[项目模型同步] 14 | ** xref:security.adoc[安全] 15 | ** xref:build.adoc[构建客户端] 16 | ** xref:config.adoc[配置] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/pages/build.adoc: -------------------------------------------------------------------------------- 1 | = 构建客户端 2 | 3 | `npm run build` 命令可以构建生产环境版本。构建结果在 `build` 文件夹。 4 | 5 | 参阅 React 文档了解更多支持的 https://facebook.github.io/create-react-app/docs/available-scripts[可用脚本]。 6 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/pages/config.adoc: -------------------------------------------------------------------------------- 1 | = 配置 2 | 3 | 默认情况下,客户端使用生产版本部署至 Tomcat,用 `app-front` 作为路径上下文。修改 `PUBLIC_URL` 环境变量可以配置这个上下文路径(在 `.env.production.local` 内定义)。 4 | 5 | 开发阶段 serve 的话,客户端使用 REST API 的绝对路径,通过 `REACT_APP_CUBA_URL` 设置(在 `.env.development.local` 内定义)。 6 | 7 | 参阅 React 文档了解 https://facebook.github.io/create-react-app/docs/advanced-configuration[所有可用的环境变量]。 8 | 9 | 查看 `src/config.ts` 文件,了解运行时通用的应用程序配置。 10 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/pages/learning-path.adoc: -------------------------------------------------------------------------------- 1 | = 然后怎么办? 2 | 3 | *React Client* 部分剩下的章节主要介绍使用的技术,以及对于很多常见的用例给出了解决方法。我们建议您还是继续阅读,但是可以跳过某些主题,将来需要时再阅读。 4 | 5 | xref:generator:index.adoc[Frontend Generator 参考] 介绍了 generator 的详细信息。解释了如何使用 CLI 以及哪些 CLI 功能在 Studio 中也可用。一定要读一读(您会觉得以 `react-typescript` 开头的命令有点意思)。 {manual_studio_frontendUi}[Studio 使用手册] 更多是介绍如何在 Studio 中使用 generator。 6 | 7 | 当然,前端的开发过程不止是生成代码而已,您也需要手动创建一些组件,或者重用我们库里的一些组件。阅读 xref:cuba-react-core:index.adoc[CUBA React Core] 和 xref:cuba-react-ui:index.adoc[CUBA React UI] 章节,了解有哪些可用组件以及如何使用。 8 | 9 | 阅读 {api_rest}[CUBA REST JS] 文档了解您的组件如何与 {manual_restApi}[通用 REST API] 通信。 10 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/pages/supported-browsers.adoc: -------------------------------------------------------------------------------- 1 | = 支持的浏览器 2 | 3 | 该客户端支持所有现代浏览器。如果要支持 IE 9/10/11,需要 https://facebook.github.io/create-react-app/docs/supported-browsers-features[额外配置]。 4 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/client-react/pages/sync-project-model.adoc: -------------------------------------------------------------------------------- 1 | = 项目模型同步 2 | 3 | 如需同步后端改动的模型,可以通过下面命令重新生成项目模型: 4 | 5 | [source,bash] 6 | ---- 7 | $ npm run `update-model` 8 | ---- 9 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-core/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[CUBA React Core] 2 | ** xref:access-control.adoc[AccessControl] 3 | ** xref:attr-perm-access-control.adoc[AttrPermAccessControl] 4 | ** xref:client-side-data-collection-store.adoc[ClientSideDataCollectionStore] 5 | ** xref:cuba-app-provider.adoc[CubaAppProvider] 6 | ** xref:data-collection-store.adoc[DataCollectionStore] 7 | ** xref:data-instance-store.adoc[DataInstanceStore] 8 | ** xref:entity-perm-access-control.adoc[EntityPermAccessControl] 9 | ** xref:main-store.adoc[MainStore] 10 | ** xref:security.adoc[Security] 11 | ** xref:specific-perm-access-control.adoc[SpecificPermAccessControl] 12 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-core/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = CUBA React Core 组件库 2 | 3 | *CUBA React Core* 组件库是由一系列组件和工具类组成,负责一些核心功能,比如操作 CUBA 实体。xref:client-react:starter-guide.adoc[React] 和 xref:client-react-native:starter-guide.adoc[React Native] 客户端都用到了这个库。该库可以通过 npm 安装: {npm_cubaReactCore}[@cuba-platform/react-core] 4 | 5 | API 参考在 link:../api-reference/cuba-react-core/index.html[这里]。 6 | 7 | 查阅本章其他内容了解如何使用该库提供的组件和工具。 8 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/images/FileUploadAndImagePreviewDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/cuba-react-ui/images/FileUploadAndImagePreviewDemo.gif -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[CUBA React UI] 2 | ** xref:data-table.adoc[DataTable] 3 | ** xref:entity-editor.adoc[EntityEditor] 4 | ** xref:entity-property.adoc[EntityProperty] 5 | ** xref:file-upload.adoc[FileUpload] 6 | ** xref:form-field.adoc[FormField] 7 | ** xref:image-preview.adoc[ImagePreview] 8 | ** xref:nested-entities-table-field.adoc[NestedEntitiesTableField] 9 | ** xref:nested-entity-field.adoc[NestedEntityField] 10 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/pages/entity-property.adoc: -------------------------------------------------------------------------------- 1 | = EntityProperty 2 | :api_ui_EntityPropertyProps: link:../api-reference/cuba-react-ui/interfaces/_ui_entityproperty_.entitypropertyprops.html 3 | 4 | `EntityProperty` 组件用来展示实体属性的值。可以根据属性的类型自动应用展示格式,并能从全局消息包(在后台定义)获取文本为属性添加相应的标签。 5 | 6 | [source,typescript] 7 | ---- 8 | 11 | ---- 12 | 13 | ''' 14 | 15 | API: {api_ui_EntityPropertyProps}[EntityPropertyProps]. 16 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/pages/image-preview.adoc: -------------------------------------------------------------------------------- 1 | = ImagePreview 2 | :api_ui_ImagePreviewProps: link:../api-reference/cuba-react-ui/interfaces/_ui_imagepreview_.imagepreviewprops.html 3 | 4 | `ImagePreview` 可以预览并下载图片。需要使用 link:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL[对象 URL]。 5 | 6 | ''' 7 | 8 | API: {api_ui_ImagePreviewProps}[ImagePreviewProps]. 9 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = CUBA React UI 组件 2 | 3 | *CUBA React UI* 包含 UI 组件。使用 {antDesign_base}/docs/react/introduce[Ant Design] UI 开发,在 xref:client-react:starter-guide.adoc[React] 客户端使用。可以通过 npm 安装:{npm_cubaReactUi}[@cuba-platform/react-ui]。 4 | 5 | API 参考文档在 link:../api-reference/cuba-react-ui/index.html[这里]。 6 | 7 | 阅读本章节剩下的部分了解如何使用该库提供的组件。 8 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/pages/nested-entities-table-field.adoc: -------------------------------------------------------------------------------- 1 | = NestedEntitiesTableField 2 | :api_ui_NestedEntitiesTableFieldProps: link:../api-reference/cuba-react-ui/interfaces/_ui_form_form_.nestedentitiestablefieldprops.html 3 | 4 | `NestedEntitiesTableField` 是一个字段组件,用在一对多组合的上下文环境中,用来表示嵌套的实体。渲染结果会展示带有新建、编辑、删除嵌套实体操作按钮的 xref:data-table.adoc[DataTable]。点击新建或者编辑按钮会打开一个 xref:entity-editor.adoc[EntityEditor]。对于一对多组合的实体属性,xref:form-field.adoc[FormField] 可以自动渲染为 `NestedEntitiesTableField`。 5 | 6 | CAUTION: 多层级联组合(比如嵌套实体也带有嵌套实体),目前不支持。 7 | 8 | ''' 9 | 10 | API: {api_ui_NestedEntitiesTableFieldProps}[NestedEntitiesTableFieldProps]. 11 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-react-ui/pages/nested-entity-field.adoc: -------------------------------------------------------------------------------- 1 | = NestedEntityField 2 | :api_ui_NestedEntityFieldProps: link:../api-reference/cuba-react-ui/interfaces/_ui_form_form_.nestedentityfieldprops.html 3 | 4 | `NestedEntityField` 是一个字段组件,用在一对一组合的上下文环境中,用来表示嵌套的实体。可以用来新建、编辑或删除嵌套实体。新建、编辑时,会为嵌套实体打开 xref:entity-editor.adoc[EntityEditor]。对于一对一组合的实体属性,xref:form-field.adoc[FormField] 可以自动渲染为 `NestedEntityField`。 5 | 6 | CAUTION: 多层级联组合(比如嵌套实体也带有嵌套实体),目前不支持。 7 | 8 | ''' 9 | 10 | API: {api_ui_NestedEntityFieldProps}[NestedEntityFieldProps]. 11 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-rest-js/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[REST API] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/cuba-rest-js/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = REST API 2 | 3 | 生成的客户端代码使用 {manual_restApi}[通用 REST API]。详细的 API endpoint 文档在 {restApiSwagger}[这里] 发布。 4 | 5 | 使用 CUBA REST JS 与通用 REST API 通信。文档和 API 参考可以在 {api_rest}[这里]。 6 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/images/browser-cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/generator/images/browser-cards.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/images/browser-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/generator/images/browser-list.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/images/interactive-projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/generator/images/interactive-projects.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/images/studio-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/generator/images/studio-integration.png -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[Frontend Generator 参考] 2 | ** xref:commands-reference.adoc[命令参考] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/generator/partials/feat-available-in-studio.adoc: -------------------------------------------------------------------------------- 1 | TIP: 该功能也能在 Studio 中使用,参阅 {manual_studio_frontendUi}[Studio 使用手册]。 2 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/getting-started/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[开始使用] 2 | ** xref:cli-specific-instructions.adoc[CLI 特性介绍] 3 | ** xref:learning-path.adoc[选择学习路径] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/getting-started/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = 开始使用 2 | 3 | 首先,请安装 {manual_studio}/#installation[CUBA Studio]。 4 | 5 | 您的学习路径一般会根据您准备构建什么样的前端(React,React Native,等等)而有所不同。但是,通常从 *Frontend Generator* 开始,两种使用的途径: 6 | 7 | - 从 Studio UI 使用 8 | - 在命令行窗口使用,这里要用到通过 Studio 生成的项目模型文件 9 | 10 | CAUTION: CLI 支持的大部分功能 Studio 都能支持,但是有一些不是。查看 xref:generator:commands-reference.adoc[Frontend Generator 参考] 了解具体支持哪些功能。另外,如果您希望您的前端项目独立于 CUBA 项目(比如前后端由不同团队开发),那么也需要在前端项目使用 CLI。 11 | 12 | 如果您需要在 CLI 使用 Frontend Generator,请参阅 xref:cli-specific-instructions.adoc[CLI 特性介绍]。否则,继续阅读 xref:learning-path.adoc[这章]。 13 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/getting-started/pages/learning-path.adoc: -------------------------------------------------------------------------------- 1 | = 选择学习路径 2 | 3 | 如果您想创建一个基于 React 的前端 UI,参阅 xref:client-react:starter-guide.adoc[React Client] 向导。 4 | 5 | 如果选择 React Native, 参阅 xref:client-react-native:starter-guide.adoc[该向导]。 6 | 7 | 即将废弃的 Polymer Client 文档在 xref:client-polymer:index.adoc[这里]。*译者注:由于 Polymer 即将废弃,我们不提供翻译。* 8 | 9 | 如果想使用其他的前端框架,可以参阅 xref:typescript-sdk:index.adoc[TypeScript SDK] 和 {api_rest}[CUBA REST JS] 文档。 10 | 11 | 如果您希望构建一个前端客户端,既可以用于桌面电脑也可以用于手机端,但是您不知道用什么框架比较好,我们推荐您使用 xref:client-react:starter-guide.adoc[React Client],这是目前能得到最优支持的选择。 12 | 13 | 如果您还是犹豫不决,或者我们的文档并没有覆盖您特殊的使用场景,请在 {forum}[论坛] 与我们联系。 14 | -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/libs/nav.adoc: -------------------------------------------------------------------------------- 1 | .Libraries API Reference 2 | * link:../api-reference/cuba-rest-js/index.html[CUBA REST JS^] 3 | * link:../api-reference/cuba-react-core/index.html[CUBA React Core^] 4 | * link:../api-reference/cuba-react-ui/index.html[CUBA React UI^] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/overview/partials/getting-started-note.adoc: -------------------------------------------------------------------------------- 1 | NOTE: 如果您还没有阅读 xref:getting-started:index.adoc[开始使用] 部分,我们建议您先阅读那部分内容。 -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/typescript-sdk/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[TypeScript SDK] -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/typescript-sdk/pages/entities.adoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/typescript-sdk/pages/entities.adoc -------------------------------------------------------------------------------- /docs-src-cn/doc-component-repo/modules/typescript-sdk/pages/enums.adoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src-cn/doc-component-repo/modules/typescript-sdk/pages/enums.adoc -------------------------------------------------------------------------------- /docs-src-cn/redirect-page-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 正在跳转... 13 | 14 | 15 | 16 | 如果没有为您自动跳转,请点击链接。 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs-src-cn/supplemental-ui/partials/head-styles.hbs: -------------------------------------------------------------------------------- 1 | {{! This Source Code Form is subject to the terms of the Mozilla Public }} 2 | {{! License, v. 2.0. If a copy of the MPL was not distributed with this }} 3 | {{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} 4 | 5 | -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-core/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-core/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-core/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-core/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-core/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-core/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-core/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-core/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-ui/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-ui/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-ui/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-ui/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-ui/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-ui/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-react-ui/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-react-ui/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-rest-js/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-rest-js/assets/images/icons.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-rest-js/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-rest-js/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-rest-js/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-rest-js/assets/images/widgets.png -------------------------------------------------------------------------------- /docs-src/api-reference/cuba-rest-js/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/api-reference/cuba-rest-js/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/antora.yml: -------------------------------------------------------------------------------- 1 | name: cuba-frontend-docs 2 | title: CUBA Frontend UI Manual 3 | version: v20.1 4 | nav: 5 | - modules/overview/nav.adoc 6 | - modules/getting-started/nav.adoc 7 | - modules/client-react/nav.adoc 8 | - modules/client-react-native/nav.adoc 9 | - modules/client-polymer/nav.adoc 10 | - modules/cuba-react-core/nav.adoc 11 | - modules/cuba-react-ui/nav.adoc 12 | - modules/typescript-sdk/nav.adoc 13 | - modules/generator/nav.adoc 14 | - modules/cuba-rest-js/nav.adoc 15 | - modules/libs/nav.adoc 16 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[Polymer Client (Deprecated)] 2 | ** xref:polymer/polymer_requirements.adoc[Requirements] 3 | ** xref:polymer/polymer_supported_browsers.adoc[Supported Browsers] 4 | ** xref:polymer/polymer_build_and_structure.adoc[Build System and Project Structure] 5 | ** xref:polymer/cuba_web_components.adoc[CUBA Web Components] 6 | ** xref:polymer/polymer_styling.adoc[Styling] 7 | ** xref:polymer/polymer_offline.adoc[Offline Capabilities] 8 | ** xref:polymer/polymer2_typescript/polymer2_typescript.adoc[TypeScript Support] 9 | ** xref:polymer/polymer_troubleshooting.adoc[Troubleshooting] 10 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/pages/polymer/cuba_web_components.adoc: -------------------------------------------------------------------------------- 1 | = CUBA Web Components 2 | 3 | The detailed API reference of CUBA elements can be found https://cuba-elements.github.io/cuba-elements/[here]. 4 | 5 | include::cuba_web_components/polymer_inintialization.adoc[leveloffset=+1] 6 | 7 | include::cuba_web_components/polymer_working_with_data.adoc[leveloffset=+1] 8 | 9 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/pages/polymer/cuba_web_components/polymer_inintialization.adoc: -------------------------------------------------------------------------------- 1 | = Initialization 2 | 3 | In order to use any `cuba-` element you need to initialize common library and connection to the REST API using `cuba-app` element : 4 | 5 | [source,html] 6 | ---- 7 | 8 | ---- 9 | 10 | It should be placed once in your app as early as possible. Do not change properties dynamically or detach/attach the element after initialization. 11 | 12 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/pages/polymer/polymer_requirements.adoc: -------------------------------------------------------------------------------- 1 | = Requirements 2 | 3 | http://git-scm.com/downloads[Git] should be installed and available from the command line. 4 | It’s required for https://bower.io/[bower] - the package manager for front-end applications. 5 | 6 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/pages/polymer/polymer_styling.adoc: -------------------------------------------------------------------------------- 1 | = Styling 2 | 3 | See the Polymer's https://www.polymer-project.org/2.0/docs/devguide/style-shadow-dom[styling guide]. The most noticeable difference between traditional approach is how global styles are specified. 4 | Since Polymer elements use Shadow DOM global styles do not leak inside the components. You need to use https://www.polymer-project.org/2.0/docs/devguide/style-shadow-dom#style-modules[style-modules] instead. There is a `shares-styles.html` file in Polymer client which is automatically being imported to any new component created in Studio. 5 | 6 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-polymer/pages/polymer/polymer_supported_browsers.adoc: -------------------------------------------------------------------------------- 1 | = Supported Browsers 2 | 3 | See the list of supported browsers on the Polymer’s https://polymer-library.polymer-project.org/2.0/docs/browsers[website] 4 | 5 | [WARNING] 6 | ==== 7 | Please do not to use Polymer client if you are targeting legacy browsers. 8 | ==== 9 | 10 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react-native/images/RNDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react-native/images/RNDemo.gif -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react-native/nav.adoc: -------------------------------------------------------------------------------- 1 | * React Native Client 2 | ** xref:starter-guide.adoc[Getting Started with React Native Client] 3 | ** xref:technologies.adoc[Technologies Overview] 4 | ** xref:learning-path.adoc[Where Do I Go From Here?] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react-native/pages/learning-path.adoc: -------------------------------------------------------------------------------- 1 | = Where Do I Go From Here? 2 | 3 | Check xref:cuba-react-core:index.adoc[CUBA React Core] section to see what components are available to you and how to use them. 4 | 5 | Check {api_rest}[CUBA REST JS] to see how your components can communicate with the {manual_restApi}[Generic REST API]. 6 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react-native/pages/technologies.adoc: -------------------------------------------------------------------------------- 1 | = Technologies Overview 2 | 3 | The client is based on the following frameworks and libraries: 4 | 5 | * https://facebook.github.io/react-native/[React Native] - UI rendering; 6 | * https://mobx.js.org/[MobX] - reactive state management; 7 | * xref:cuba-react-core:index.adoc[CUBA React Core] - CUBA React core components and utilities; 8 | * {api_rest}[CUBA REST JS] - interaction with СUBA generic REST API; 9 | * https://expo.io/[Expo] - development tools for React Native; 10 | 11 | React Native client is written in link:https://www.typescriptlang.org/[TypeScript]. 12 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/data-table-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/data-table-demo.gif -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/home-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/home-screen.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/login-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/login-screen.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/pet-clinic-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/pet-clinic-browser.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/pet-clinic-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/pet-clinic-editor.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/studio-adding-frontend-component.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/studio-adding-frontend-component.gif -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/images/studio-create-front-module.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/client-react/images/studio-create-front-module.gif -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/pages/build.adoc: -------------------------------------------------------------------------------- 1 | = Building the Client 2 | 3 | `npm run build` command builds your app for production use. See `build` folder. 4 | 5 | See https://facebook.github.io/create-react-app/docs/available-scripts[available scripts] in Create React App documentation. 6 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/pages/config.adoc: -------------------------------------------------------------------------------- 1 | = Configuration 2 | 3 | By default, client deployed to Tomcat is built with production preset and aimed to be served under `app-front` context. Use `PUBLIC_URL` env variable to change this behavior (see `.env.production.local`). 4 | 5 | The client served from development server has absolute URL of REST API specified in `REACT_APP_CUBA_URL` (see `.env.development.local`). 6 | 7 | See the https://facebook.github.io/create-react-app/docs/advanced-configuration[list of all available environment variables]. 8 | 9 | See `src/config.ts` for full list of common application settings used in runtime. 10 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/pages/supported-browsers.adoc: -------------------------------------------------------------------------------- 1 | = Supported Browsers 2 | 3 | The client supports all modern (evergreen) browsers. In order to support IE 9,10,11 https://facebook.github.io/create-react-app/docs/supported-browsers-features[additional configuration] is required. 4 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/client-react/pages/sync-project-model.adoc: -------------------------------------------------------------------------------- 1 | = Synchronizing the Project Model 2 | 3 | In order to sync up with the changes on the backend, you can re-generate the project model using the following command: 4 | 5 | [source,bash] 6 | ---- 7 | $ npm run `update-model` 8 | ---- 9 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-core/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[CUBA React Core] 2 | ** xref:access-control.adoc[AccessControl] 3 | ** xref:attr-perm-access-control.adoc[AttrPermAccessControl] 4 | ** xref:client-side-data-collection-store.adoc[ClientSideDataCollectionStore] 5 | ** xref:cuba-app-provider.adoc[CubaAppProvider] 6 | ** xref:data-collection-store.adoc[DataCollectionStore] 7 | ** xref:data-instance-store.adoc[DataInstanceStore] 8 | ** xref:entity-perm-access-control.adoc[EntityPermAccessControl] 9 | ** xref:main-store.adoc[MainStore] 10 | ** xref:security.adoc[Security] 11 | ** xref:specific-perm-access-control.adoc[SpecificPermAccessControl] 12 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-core/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = CUBA React Core Components 2 | 3 | *CUBA React Core* library is a collection of components and utilities responsible for core functionalities such as working with CUBA entities. It is used by both xref:client-react:starter-guide.adoc[React] and xref:client-react-native:starter-guide.adoc[React Native] clients. This library is available as an npm package {npm_cubaReactCore}[@cuba-platform/react-core]. 4 | 5 | API reference can be found link:../api-reference/cuba-react-core/index.html[here]. 6 | 7 | See the rest of this section for information on how to use the components and utilities provided by this library. 8 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-ui/images/FileUploadAndImagePreviewDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/cuba-react-ui/images/FileUploadAndImagePreviewDemo.gif -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-ui/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[CUBA React UI] 2 | ** xref:data-table.adoc[DataTable] 3 | ** xref:entity-editor.adoc[EntityEditor] 4 | ** xref:entity-property.adoc[EntityProperty] 5 | ** xref:file-upload.adoc[FileUpload] 6 | ** xref:form-field.adoc[FormField] 7 | ** xref:image-preview.adoc[ImagePreview] 8 | ** xref:nested-entities-table-field.adoc[NestedEntitiesTableField] 9 | ** xref:nested-entity-field.adoc[NestedEntityField] 10 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-ui/pages/image-preview.adoc: -------------------------------------------------------------------------------- 1 | = ImagePreview 2 | :api_ui_ImagePreviewProps: link:../api-reference/cuba-react-ui/interfaces/_ui_imagepreview_.imagepreviewprops.html 3 | 4 | `ImagePreview` allows to preview or download an image. It works with an link:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL[object URL]. 5 | 6 | ''' 7 | 8 | API: {api_ui_ImagePreviewProps}[ImagePreviewProps]. 9 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-react-ui/pages/index.adoc: -------------------------------------------------------------------------------- 1 | = CUBA React UI Components 2 | 3 | *CUBA React UI* contains the UI components. It uses {antDesign_base}/docs/react/introduce[Ant Design] UI kit and is used by the xref:client-react:starter-guide.adoc[React] client. It is available as an npm package {npm_cubaReactUi}[@cuba-platform/react-ui]. 4 | 5 | API reference can be found link:../api-reference/cuba-react-ui/index.html[here]. 6 | 7 | See the rest of this section for information on how to use the components provided by this library. 8 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role-attr-perms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role-attr-perms.jpg -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role-entity-perms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role-entity-perms.jpg -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/cuba-rest-js/images/rest-access-role.jpg -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/cuba-rest-js/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[REST API] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/images/browser-cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/generator/images/browser-cards.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/images/browser-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/generator/images/browser-list.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/images/interactive-projects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/generator/images/interactive-projects.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/images/studio-integration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/generator/images/studio-integration.png -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[Frontend Generator Reference] 2 | ** xref:commands-reference.adoc[Commands Description] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/generator/partials/feat-available-in-studio.adoc: -------------------------------------------------------------------------------- 1 | TIP: This feature is also available in CUBA Studio, see {manual_studio_frontendUi}[Studio Manual]. 2 | -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/getting-started/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[Getting Started] 2 | ** xref:cli-specific-instructions.adoc[CLI-Specific Instructions] 3 | ** xref:learning-path.adoc[Choosing a Learning Path] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/libs/nav.adoc: -------------------------------------------------------------------------------- 1 | .Libraries API Reference 2 | * link:../api-reference/cuba-rest-js/index.html[CUBA REST JS^] 3 | * link:../api-reference/cuba-react-core/index.html[CUBA React Core^] 4 | * link:../api-reference/cuba-react-ui/index.html[CUBA React UI^] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/overview/partials/getting-started-note.adoc: -------------------------------------------------------------------------------- 1 | NOTE: If you haven't read our introductory xref:getting-started:index.adoc[Getting Started] section, we encourage you to do so now. -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/typescript-sdk/nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[TypeScript SDK] -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/typescript-sdk/pages/entities.adoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/typescript-sdk/pages/entities.adoc -------------------------------------------------------------------------------- /docs-src/doc-component-repo/modules/typescript-sdk/pages/enums.adoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs-src/doc-component-repo/modules/typescript-sdk/pages/enums.adoc -------------------------------------------------------------------------------- /docs-src/redirect-page-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | Redirecting... 12 | 13 | 14 | If you are not automatically redirected, please follow this link. 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs-src/supplemental-ui/partials/head-styles.hbs: -------------------------------------------------------------------------------- 1 | {{! This Source Code Form is subject to the terms of the Mozilla Public }} 2 | {{! License, v. 2.0. If a copy of the MPL was not distributed with this }} 3 | {{! file, You can obtain one at http://mozilla.org/MPL/2.0/. }} 4 | 5 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/docs/.nojekyll -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/*", "test-pup" 4 | ], 5 | "version": "independent" 6 | } 7 | -------------------------------------------------------------------------------- /packages/cuba-react-core/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 2 6 | indent_style = space -------------------------------------------------------------------------------- /packages/cuba-react-core/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | dist 4 | dist-transpiled 5 | cuba-platform-react-core-*.tgz 6 | coverage 7 | -------------------------------------------------------------------------------- /packages/cuba-react-core/.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. 2 | version: v1.13.5 3 | ignore: {} 4 | patch: {} 5 | -------------------------------------------------------------------------------- /packages/cuba-react-core/README.md: -------------------------------------------------------------------------------- 1 | # CUBA React Core 2 | 3 | Contains core components and utilities for CUBA Platform frontend clients based on React and React Native. 4 | 5 | Documentation and API reference can be found [here](https://doc.cuba-platform.com/frontend). 6 | -------------------------------------------------------------------------------- /packages/cuba-react-core/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@babel/preset-env', '@babel/preset-react'], 3 | }; -------------------------------------------------------------------------------- /packages/cuba-react-core/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "roots": [ 3 | "/src" 4 | ], 5 | "transform": { 6 | "^.+\\.tsx?$": "ts-jest" 7 | }, 8 | "coverageThreshold": { 9 | "global": { 10 | "statements": 49, 11 | "branches": 47, 12 | "functions": 30, 13 | "lines": 50 14 | } 15 | }, 16 | "collectCoverageFrom": [ 17 | "src/**/*.{ts,tsx}", 18 | ] 19 | }; 20 | -------------------------------------------------------------------------------- /packages/cuba-react-core/src/app/MenuConfig.ts: -------------------------------------------------------------------------------- 1 | export interface RouteItem { 2 | pathPattern: string 3 | menuLink: string 4 | component: any 5 | caption: string 6 | } 7 | 8 | export interface SubMenu { 9 | items: Array 10 | caption: string 11 | } 12 | 13 | const menuItems: Array = []; 14 | 15 | export function getMenuItems() : Array { 16 | return menuItems; 17 | } 18 | -------------------------------------------------------------------------------- /packages/cuba-react-core/src/util/data.ts: -------------------------------------------------------------------------------- 1 | export const TEMPORARY_ENTITY_ID_PREFIX = '_CUBA_TEMPORARY_ENTITY_ID_'; 2 | 3 | export const generateTemporaryEntityId = () => TEMPORARY_ENTITY_ID_PREFIX + Math.random().toString().slice(2); 4 | -------------------------------------------------------------------------------- /packages/cuba-react-core/src/util/errorHandling.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * To be used in (supposedly) unreachable code after exhaustive check of `argument`. 3 | * 4 | * @remarks 5 | * Will cause a compile-time error if `argument` was not exhaustively checked. 6 | * Will cause a runtime error if reached. 7 | * 8 | * @param argumentName 9 | * @param argument 10 | */ 11 | export function assertNever(argumentName: string, argument: never): never { 12 | throw new Error(`Unexpected ${argumentName}: ${argument}`); 13 | } 14 | -------------------------------------------------------------------------------- /packages/cuba-react-core/src/util/temporal.ts: -------------------------------------------------------------------------------- 1 | import { Moment } from "moment"; 2 | 3 | /** 4 | * 5 | * @param momentInstance 6 | * 7 | * @returns a clone of provided Moment instance with milliseconds set to zero, 8 | * or `undefined` if a nullish value was provided. 9 | */ 10 | export function stripMilliseconds< 11 | P extends Moment | null | undefined, 12 | R = P extends Moment ? Moment : undefined 13 | >(momentInstance: P): R { 14 | return momentInstance?.clone().milliseconds(0) as unknown as R; 15 | } -------------------------------------------------------------------------------- /packages/cuba-react-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 2 6 | indent_style = space -------------------------------------------------------------------------------- /packages/cuba-react-ui/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | dist 4 | dist-transpiled 5 | cuba-platform-react-ui-*.tgz 6 | coverage 7 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. 2 | version: v1.13.5 3 | ignore: {} 4 | patch: {} 5 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/README.md: -------------------------------------------------------------------------------- 1 | # CUBA React UI 2 | 3 | Contains UI components and utilities for CUBA Platform React client. 4 | 5 | Documentation and API reference can be found [here](https://doc.cuba-platform.com/frontend). 6 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@babel/preset-env', '@babel/preset-react'], 3 | }; -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/index.less: -------------------------------------------------------------------------------- 1 | @import "ui/FileUpload"; 2 | @import "ui/table/DataTable"; 3 | @import "ui/table/DataTableCustomFilter"; 4 | @import "ui/table/DataTableFilterControlLayout"; 5 | @import "ui/table/DataTableIntervalEditor"; 6 | @import "ui/table/DataTableListEditor"; 7 | @import "ui/form/InputNumber"; 8 | @import "ui/form/EntityEditor"; 9 | @import "ui/form/NestedEntitiesTableField"; 10 | @import "ui/form/NestedEntityField"; 11 | @import "style/palette"; 12 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui/EntityProperty'; 2 | export * from './ui/form/Form'; 3 | export * from './ui/Msg'; 4 | export * from './ui/table/DataTable'; 5 | export * from './ui/table/DataTableHelpers'; 6 | export * from './ui/table/DataTableCustomFilter'; 7 | export * from './ui/FileUpload'; 8 | export * from './ui/ImagePreview'; 9 | export * from './ui/MultilineText'; 10 | export * from './ui/Spinner'; 11 | export * from './ui/paging/Paging'; 12 | 13 | export * from './util/errorHandling'; 14 | export * from './util/mapCubaRestErrorToIntlId'; 15 | 16 | export * from './i18n/I18nProvider'; 17 | export * from './i18n/validation'; 18 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/ImagePreview.less: -------------------------------------------------------------------------------- 1 | .cuba-image-preview { 2 | & > .title { 3 | margin-bottom: 8px; 4 | } 5 | 6 | & > .image { 7 | display: block; 8 | margin: 0 auto; 9 | max-height: 60vh; 10 | max-width: 100%; 11 | } 12 | } 13 | 14 | .cuba-image-preview-spinner { 15 | margin: 64px 0 64px 0; 16 | } -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/MultilineText.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | export type MultilineTextProps = { 4 | lines: string[] 5 | } 6 | 7 | export function MultilineText({lines}: MultilineTextProps) { 8 | return ( 9 | <> 10 | { lines.map((line, index) =>
{line}
) } 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/Spinner.less: -------------------------------------------------------------------------------- 1 | .spinner-component { 2 | position: absolute; 3 | left: 50%; 4 | top: 50%; 5 | transform: translate(-50%, -50%); 6 | } -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/Spinner.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {Spin} from "antd"; 3 | import './Spinner.less'; 4 | 5 | export function Spinner() { 6 | 7 | return ( 8 |
9 | 10 |
11 | ); 12 | 13 | } -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/form/DoubleInput.tsx: -------------------------------------------------------------------------------- 1 | import {InputNumber} from "antd"; 2 | import * as React from "react"; 3 | import './InputNumber.less'; 4 | import {forwardRef, Ref} from 'react'; 5 | import {InputNumberProps} from 'antd/es/input-number'; 6 | 7 | export const DoubleInput = forwardRef((props: InputNumberProps, ref: Ref) => { 8 | return ( 9 | 13 | ); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/form/EntityEditor.less: -------------------------------------------------------------------------------- 1 | .cuba-entity-editor { 2 | > .errormessage { 3 | margin-bottom: 24px; 4 | } 5 | 6 | > .actions { 7 | text-align: center; 8 | } 9 | 10 | .submitbutton { 11 | margin-left: 8px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/form/InputNumber.less: -------------------------------------------------------------------------------- 1 | .inputnumber-field { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/form/NestedEntitiesTableField.less: -------------------------------------------------------------------------------- 1 | .cuba-nested-entity-editor-buttons { 2 | margin-bottom: 12px; 3 | 4 | > .button { 5 | margin-right: 12px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/form/NestedEntityField.less: -------------------------------------------------------------------------------- 1 | .cuba-nested-entity-editor-icon { 2 | margin-left: 8px; 3 | } 4 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/table/DataTable.less: -------------------------------------------------------------------------------- 1 | @import "antd/es/style/themes/default"; 2 | 3 | .cuba-data-table { 4 | > .buttons { 5 | display: flex; 6 | flex-wrap: wrap; 7 | } 8 | } 9 | 10 | .cuba-data-table-clear-filters { 11 | margin-left: auto; 12 | } 13 | 14 | .cuba-data-table-loader { 15 | position: absolute; 16 | left: 50%; 17 | top: 50%; 18 | transform: translate(-50%, -50%); 19 | } 20 | 21 | ._cuba-hide-selection-column .ant-table-selection-column { 22 | display: none; 23 | } 24 | 25 | @media screen and (max-width: @screen-xs-max) { 26 | .cuba-data-table-clear-filters { 27 | margin-left: 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/table/DataTableCustomFilter.less: -------------------------------------------------------------------------------- 1 | @import "antd/es/style/themes/default"; 2 | 3 | .cuba-table-filter { 4 | > .settings { 5 | max-width: 550px; 6 | padding: @padding-sm; 7 | 8 | > .filtercontrol { 9 | &.-complex-editor { 10 | margin-right: 0; 11 | } 12 | } 13 | } 14 | > .divider { 15 | margin: 0; 16 | } 17 | > .footer { 18 | display: flex; 19 | justify-content: left; 20 | 21 | &:first-child { 22 | margin-right: 12px; 23 | } 24 | } 25 | } 26 | 27 | .cuba-table-filter-loader { 28 | margin: 12px; 29 | } 30 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/table/DataTableIntervalEditor.less: -------------------------------------------------------------------------------- 1 | @import "antd/es/style/themes/default"; 2 | 3 | .cuba-table-filter-interval { 4 | margin-top: 12px; 5 | } 6 | 7 | .cuba-interval-mode-select { 8 | display: flex; 9 | flex-direction: column; 10 | 11 | padding: 6px; 12 | margin-top: 0; 13 | margin-right: 16px; 14 | border: dotted @border-width-base @normal-color; 15 | border-radius: @border-radius-base; 16 | } 17 | 18 | .cuba-interval-predefined-select { 19 | min-width: 100px; 20 | } 21 | 22 | .cuba-interval-include-current { 23 | white-space: nowrap; 24 | } 25 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/ui/table/DataTableListEditor.less: -------------------------------------------------------------------------------- 1 | .cuba-table-filter-list { 2 | line-height: 32px; 3 | margin-top: 8px; 4 | } 5 | 6 | .cuba-table-filter-list-new { 7 | border-style: dashed; 8 | } 9 | 10 | .cuba-table-filter-list-input.ant-row { 11 | display: inline-block; 12 | } 13 | -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/util/files.ts: -------------------------------------------------------------------------------- 1 | export function saveFile(objectUrl: string, fileName: string) { 2 | const anchor: HTMLAnchorElement = document.createElement('a'); 3 | anchor.href = objectUrl; 4 | anchor.download = fileName; 5 | anchor.click(); 6 | } -------------------------------------------------------------------------------- /packages/cuba-react-ui/src/util/regex.ts: -------------------------------------------------------------------------------- 1 | // More strict validation would be: 2 | // export const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i; 3 | // However, we are using relaxed validation rules as Generic UI allows to create UUIDs with invalid 4 | // versions and variants (https://github.com/cuba-platform/cuba/issues/2867) 5 | // TODO Once https://github.com/cuba-platform/cuba/issues/2867 is fixed, choose the regex dynamically based on Platform version. 6 | export const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; -------------------------------------------------------------------------------- /packages/cuba-rest-js/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | indent_style = space 6 | indent_size = 2 7 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .local-storage 3 | node_modules 4 | npm-debug.log 5 | .nyc_output 6 | coverage 7 | .gradle 8 | cuba-platform-rest-*.tgz 9 | dist-browser 10 | dist-node 11 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/.npmignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .editorconfig 3 | .gradle 4 | .travis.yml 5 | node_modules 6 | tsconfig.json 7 | tslint.json 8 | 9 | src 10 | test 11 | test-app 12 | .nyc_output 13 | .local-storage 14 | coverage 15 | docs 16 | examples 17 | 18 | gradle 19 | gradlew 20 | gradlew.bat 21 | build.gradle -------------------------------------------------------------------------------- /packages/cuba-rest-js/.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. 2 | version: v1.13.5 3 | ignore: {} 4 | patch: {} 5 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cuba-rest-js", 3 | "description": "JavaScript library for working with CUBA Platform's REST API v2", 4 | "main": [ 5 | "dist-browser/cuba.js" 6 | ], 7 | "ignore": [ 8 | "*", 9 | "!/dist-browser/*", 10 | "!/package.json", 11 | "!/bower.json" 12 | ], 13 | "license": "Apache-2.0" 14 | } -------------------------------------------------------------------------------- /packages/cuba-rest-js/examples/node/README.md: -------------------------------------------------------------------------------- 1 | ```bash 2 | npm install 3 | node index.js 4 | ``` -------------------------------------------------------------------------------- /packages/cuba-rest-js/examples/node/index.js: -------------------------------------------------------------------------------- 1 | global.fetch = require('node-fetch'); 2 | global.localStorage = new require('node-localstorage').LocalStorage('./.local-storage'); 3 | 4 | const cuba = require('../../dist-node/cuba.js'); 5 | 6 | const app = cuba.initializeApp({apiUrl: 'http://localhost:8080/app/rest/'}); 7 | 8 | app.getUserInfo().then((d) => { 9 | console.log(d); 10 | }); 11 | 12 | app.login('admin', 'admin').then((d) => { 13 | console.log(d); 14 | }); -------------------------------------------------------------------------------- /packages/cuba-rest-js/examples/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cuba-rest-js-node-example", 3 | "version": "1.0.0", 4 | "description": "Example of cuba-rest-js in node js app", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "license": "Apache-2.0", 10 | "dependencies": { 11 | "node-fetch": "^1.7.1", 12 | "node-localstorage": "^1.3.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "coverageThreshold": { 3 | "global": { 4 | "statements": 87, 5 | "branches": 88, 6 | "functions": 78, 7 | "lines": 88 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/src/error.ts: -------------------------------------------------------------------------------- 1 | export class CubaRestError extends Error { 2 | public response?: Response; 3 | public name = 'CubaRestError' as const; 4 | 5 | constructor({message, response}: { 6 | message: string, 7 | response?: Response 8 | }) { 9 | super(message); 10 | if(response !== undefined) { 11 | this.response = response; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/src/filter.ts: -------------------------------------------------------------------------------- 1 | export type OperatorType = '=' | '>' | '>=' | '<' | '<=' | '<>' | 'startsWith' | 'endsWith' | 'contains' 2 | | 'doesNotContain' | 'in' | 'notIn' | 'notEmpty'; 3 | 4 | export type GroupType = 'AND' | 'OR'; 5 | 6 | export interface EntityFilter { 7 | conditions: Array; 8 | } 9 | 10 | export interface ConditionsGroup { 11 | group: GroupType; 12 | conditions: Condition[]; 13 | } 14 | 15 | export type FilterValue = string | number | string[] | number[] | null; 16 | 17 | export interface Condition { 18 | property: string; 19 | operator: OperatorType; 20 | value: FilterValue; 21 | } 22 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/test/common.js: -------------------------------------------------------------------------------- 1 | const cuba = require('../dist-node/cuba.js'); 2 | const apiUrl = 'http://localhost:8080/app/rest/'; 3 | 4 | exports.initApp = function initApp(initApiVersion) { 5 | return new cuba.CubaApp('', apiUrl, 'scr-886snZDO', 6 | 'bf37f38be32f307c4fc5b2c1517cac2984ea46eaf6856dfa56cfe92212ee26c9', 7 | undefined, undefined, initApiVersion); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/test/cuba-app-not-logged.spec.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const {initApp} = require('./common'); 4 | global.fetch = require('node-fetch'); 5 | 6 | describe('CubaApp not logged in', function() { 7 | describe('.setSessionLocal()', function() { 8 | it('should fail if not logged in', function(done) { 9 | const app = initApp(); 10 | app.setSessionLocale() 11 | .then(() => { 12 | done('did not fail'); 13 | }) 14 | .catch(() => { 15 | done(); 16 | }) 17 | }); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /packages/cuba-rest-js/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "noEmitOnError": true, 5 | "removeComments": false, 6 | "declaration": true, 7 | "sourceMap": true, 8 | "outDir": "dist-node", 9 | "lib": [ 10 | "DOM", 11 | "ES5", 12 | "ES2015.Promise", 13 | "ES2015.Symbol", 14 | "ES2015.Iterable" 15 | ] 16 | }, 17 | "include": [ 18 | "src/**/*" 19 | ], 20 | "exclude": [ 21 | "node_modules" 22 | ] 23 | } -------------------------------------------------------------------------------- /packages/cuba-rest-js/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "max-line-length": [true, 120], 5 | "object-literal-sort-keys": false, 6 | "no-string-literal": false, 7 | "quotemark": false, 8 | "interface-name": false, 9 | "ordered-imports": false, 10 | "trailing-comma": false, 11 | "no-trailing-whitespace": false, 12 | "curly": { 13 | "options": "ignore-same-line" 14 | }, 15 | "arrow-parens": false 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/front-generator/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.{js,ts,tsx,ejs}] 4 | indent_size = 2 -------------------------------------------------------------------------------- /packages/front-generator/.gitignore: -------------------------------------------------------------------------------- 1 | .tmp 2 | .idea 3 | test/e2e/generated 4 | src/test/generated 5 | lib 6 | node_modules 7 | coverage 8 | .nyc_output 9 | -------------------------------------------------------------------------------- /packages/front-generator/.npmignore: -------------------------------------------------------------------------------- 1 | /* 2 | !package.json 3 | !bin 4 | !lib -------------------------------------------------------------------------------- /packages/front-generator/.nycrc.yaml: -------------------------------------------------------------------------------- 1 | # coverage check config 2 | 3 | extends: "@istanbuljs/nyc-config-typescript" 4 | check-coverage: true 5 | skip-full: true 6 | 7 | # do not check coverage in this folders 8 | # polymer apps is deprecated and will be removed in future releases 9 | exclude: [ 10 | "src/test/**", 11 | "src/generators/*/*/template/**", 12 | "src/generators/polymer2/**", 13 | "src/generators/polymer2-typescript/**" 14 | ] 15 | 16 | statements: 89 17 | branches: 74 18 | functions: 90 19 | lines: 89 20 | -------------------------------------------------------------------------------- /packages/front-generator/README.md: -------------------------------------------------------------------------------- 1 | # Frontend Generator 2 | 3 | The Frontend Generator is a scaffolding tool that can be used to speed up the process of developing a frontend client. It can be used from [CUBA Studio](https://doc.cuba-platform.com/studio/) or as a standalone CLI tool. It can generate a starter app and add the pieces you need such as entity browser and editor screens. 4 | 5 | ## Documentation 6 | 7 | You can find documentation on Frontend Generator in [Frontend UI Manual](https://doc.cuba-platform.com/frontend). -------------------------------------------------------------------------------- /packages/front-generator/bin/gen-cuba-front.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | process.title = 'gen-cuba-front'; 6 | 7 | process.on('unhandledRejection', (reason, p) => { 8 | console.log('Unhandled Rejection ', p, ' reason: ', reason); 9 | process.exit(1); 10 | }); 11 | 12 | require('../lib/cli').createAndLaunchCli(); -------------------------------------------------------------------------------- /packages/front-generator/custom_types/inquirer-autocomplete-prompt.d.ts: -------------------------------------------------------------------------------- 1 | declare module "inquirer-autocomplete-prompt" {} 2 | -------------------------------------------------------------------------------- /packages/front-generator/custom_types/rxjs.d.ts: -------------------------------------------------------------------------------- 1 | // added since @types/yeoman-generator@2.0.3 contains reference to Rx.Observable 2 | declare namespace Rx { 3 | export interface Observable {} 4 | } -------------------------------------------------------------------------------- /packages/front-generator/custom_types/yeoman-environment.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'yeoman-environment' { 2 | 3 | class YeomanEnvironment { 4 | register(library: any, target?: string): string; 5 | registerStub(generator: any, namespace?: string): any; 6 | run(target: string, options?: any, done?: Function): void; 7 | getGeneratorsMeta(): {[name: string]: YeomanEnvironment.GeneratorMeta}; 8 | lookup(callback: (error?: any) => void): void; 9 | } 10 | 11 | namespace YeomanEnvironment { 12 | interface GeneratorMeta { 13 | resolved: string; 14 | namespace: string; 15 | } 16 | } 17 | 18 | export = YeomanEnvironment; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /packages/front-generator/scripts/copy-templates.js: -------------------------------------------------------------------------------- 1 | const vfs = require('vinyl-fs'); 2 | 3 | vfs.src([ 4 | 'src/**/template/**', 5 | 'src/**/template/.**', 6 | 'src/**/info.json'] 7 | ).pipe(vfs.dest('lib')); -------------------------------------------------------------------------------- /packages/front-generator/src/common/constants.ts: -------------------------------------------------------------------------------- 1 | export const ENTITIES_DIR = 'entities'; 2 | export const BASE_ENTITIES_DIR = 'base'; 3 | export const ENUMS_DIR = 'enums'; 4 | export const ENUMS_FILE = 'enums'; 5 | 6 | export const CUBA_APP_NAME = 'cubaApp'; 7 | export const CUBA_APP_TYPE = 'CubaApp'; 8 | export const FETCH_OPTIONS_TYPE = 'FetchOptions'; 9 | export const SERIALIZED_ENTITY_TYPE = 'SerializedEntity'; 10 | export const ENTITIES_WITH_COUNT_TYPE = 'EntitiesWithCount'; 11 | export const FETCH_OPTIONS_NAME = 'fetchOpts'; 12 | export const CUBA_APP_MODULE_SPEC = '@cuba-platform/rest'; 13 | -------------------------------------------------------------------------------- /packages/front-generator/src/common/ts-helpers.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | 3 | export function renderTSNodes(nodes: ts.Node[], separator: string = '\n'): string { 4 | const resultFile = ts.createSourceFile( 5 | 'temp.ts', 6 | '', 7 | ts.ScriptTarget.Latest, 8 | false, 9 | ts.ScriptKind.TS, 10 | ); 11 | const printer = ts.createPrinter({ 12 | newLine: ts.NewLineKind.LineFeed, 13 | }); 14 | // todo VM 15 | let content = ''; 16 | nodes.forEach(node => { 17 | content += printer.printNode( 18 | ts.EmitHint.Unspecified, 19 | node, 20 | resultFile, 21 | ) + separator; 22 | }); 23 | 24 | return content; 25 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/index.ts: -------------------------------------------------------------------------------- 1 | import {commonGenerationOptionsConfig} from "../../../common/cli-options"; 2 | import {createPolymer2AppGenerator} from "../../polymer2/app"; 3 | import * as path from "path"; 4 | 5 | export const generator = createPolymer2AppGenerator(path.join(__dirname, 'template')); 6 | export {commonGenerationOptionsConfig as options}; 7 | export const params = []; -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/_gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | node_modules 3 | build 4 | /build-gradle 5 | src/**/*.js 6 | src/**/*.js.map -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-144x144.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-192x192.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-32x32.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-48x48.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-512x512.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-64x64.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-72x72.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/app-icon/icon-96x96.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2-typescript/app/template/images/favicon.ico -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= title %>", 3 | "short_name": "<%= project.name %>", 4 | "start_url": "/<%= basePath %>/", 5 | "display": "standalone", 6 | "background_color": "<%= baseColor %>", 7 | "icons": [ 8 | { 9 | "src": "images/app-icon/icon-192x192.png", 10 | "sizes": "192x192", 11 | "type": "image/png" 12 | }, 13 | { 14 | "src": "images/app-icon/icon-512x512.png", 15 | "sizes": "512x512", 16 | "type": "image/png" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= project.name %>", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "build": "npm run compile && polymer build", 6 | "serve": "polymer serve", 7 | "compile": "tsc", 8 | "watch": "tsc -w" 9 | }, 10 | "devDependencies": { 11 | "bower": "~1.8.2", 12 | "polymer-cli": "~1.8.0", 13 | "typescript": "~2.8.1" 14 | }, 15 | "private": true, 16 | "cubaPlatform": { 17 | "generator": "polymer2-typescript" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/polymer.json: -------------------------------------------------------------------------------- 1 | { 2 | "entrypoint": "index.html", 3 | "shell": "src/<%= project.namespace %>-shell.html", 4 | "sources": [ 5 | "src/**/*", 6 | "images/**/*", 7 | "bower.json" 8 | ], 9 | "extraDependencies": [ 10 | "manifest.json", 11 | "service-worker.js", 12 | "bower_components/webcomponentsjs/*.js", 13 | "bower_components/fetch/fetch.js" 14 | ], 15 | "lint": { 16 | "rules": ["polymer-2"] 17 | }, 18 | "builds": [ 19 | { 20 | "preset": "es6-unbundled", 21 | "basePath": "/<%= basePath %>/", 22 | "addServiceWorker": false 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/service-worker.js: -------------------------------------------------------------------------------- 1 | console.info('Service worker disabled for development, will be generated at build time.'); -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/src/shared-styles.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/app/template/sw-precache-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | replacePrefix: '/<%= basePath %>/', 3 | staticFileGlobs: [ 4 | 'index.html', 5 | 'src/**.html', 6 | 'images/*', 7 | 'manifest.json', 8 | 'bower_components/webcomponentsjs/webcomponents-loader.js', 9 | 'bower_components/fetch/fetch.js' 10 | ], 11 | navigateFallback: 'index.html' 12 | }; 13 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/blank-component/template/component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/blank-component/template/component.ts: -------------------------------------------------------------------------------- 1 | namespace <%= projectNamespace %> { 2 | const {customElement} = Polymer.decorators; 3 | 4 | @customElement('<%= componentName %>') 5 | class <%= className %> extends Polymer.Element { 6 | } 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/common.ts: -------------------------------------------------------------------------------- 1 | export interface TSPolymerElementModel { 2 | projectNamespace: string; 3 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2-typescript/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "clientBaseTech": "Polymer", 3 | "bower": true 4 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template-model.ts: -------------------------------------------------------------------------------- 1 | import {ProjectInfo} from "../../../common/model/cuba-model"; 2 | 3 | export interface Polymer2AppTemplateModel { 4 | generatorPackageVersion: string; 5 | title: string; 6 | baseColor: string; 7 | basePath: string; 8 | project: ProjectInfo; 9 | genClassName: (suffix: string) => string; 10 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/_gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | bower_components 3 | build 4 | /build-gradle 5 | .generation -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-144x144.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-192x192.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-32x32.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-48x48.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-512x512.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-64x64.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-72x72.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/app-icon/icon-96x96.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/polymer2/app/template/images/favicon.ico -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= title %>", 3 | "short_name": "<%= project.name %>", 4 | "start_url": "/<%= basePath %>/", 5 | "display": "standalone", 6 | "background_color": "<%= baseColor %>", 7 | "icons": [ 8 | { 9 | "src": "images/app-icon/icon-192x192.png", 10 | "sizes": "192x192", 11 | "type": "image/png" 12 | }, 13 | { 14 | "src": "images/app-icon/icon-512x512.png", 15 | "sizes": "512x512", 16 | "type": "image/png" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= project.name %>", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "build": "polymer build", 6 | "serve": "polymer serve" 7 | }, 8 | "devDependencies": { 9 | "bower": "~1.8.2", 10 | "polymer-cli": "~1.8.0" 11 | }, 12 | "private": true, 13 | "cubaPlatform": { 14 | "generator": "polymer2" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/polymer.json: -------------------------------------------------------------------------------- 1 | { 2 | "entrypoint": "index.html", 3 | "shell": "src/<%= project.namespace %>-shell.html", 4 | "sources": [ 5 | "src/**/*", 6 | "images/**/*", 7 | "bower.json" 8 | ], 9 | "extraDependencies": [ 10 | "manifest.json", 11 | "service-worker.js", 12 | "bower_components/webcomponentsjs/*.js", 13 | "bower_components/fetch/fetch.js" 14 | ], 15 | "lint": { 16 | "rules": ["polymer-2"] 17 | }, 18 | "builds": [ 19 | { 20 | "preset": "es6-unbundled", 21 | "basePath": "/<%= basePath %>/", 22 | "addServiceWorker": false 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/service-worker.js: -------------------------------------------------------------------------------- 1 | console.info('Service worker disabled for development, will be generated at build time.'); -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/app/template/sw-precache-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | replacePrefix: '/<%= basePath %>/', 3 | staticFileGlobs: [ 4 | 'index.html', 5 | 'src/**.html', 6 | 'images/*', 7 | 'manifest.json', 8 | 'bower_components/webcomponentsjs/webcomponents-loader.js', 9 | 'bower_components/fetch/fetch.js' 10 | ], 11 | navigateFallback: 'index.html' 12 | }; 13 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/blank-component/params.ts: -------------------------------------------------------------------------------- 1 | import {StudioTemplateProperty, StudioTemplatePropertyType} from "../../../common/studio/studio-model"; 2 | 3 | export const blankComponentParams: StudioTemplateProperty[] = [ 4 | { 5 | caption: "Component name", 6 | code: "componentName", 7 | propertyType: StudioTemplatePropertyType.POLYMER_COMPONENT_NAME, 8 | required: true 9 | } 10 | ]; -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/blank-component/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | 3 | export interface Polymer2ComponentTemplateModel extends CommonTemplateModel { 4 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/booleanField.html: -------------------------------------------------------------------------------- 1 | <%- label %> -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/dateField.html: -------------------------------------------------------------------------------- 1 | required <%}%>> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/dateTimeField.html: -------------------------------------------------------------------------------- 1 | required <% }%> 4 | <% if (maxLength!=null) { %> maxlength="<%-maxLength%>" <%}%> 5 | error-message="[[<%-errorBindPath%>]]" 6 | invalid="[[_isInvalid(<%-errorBindPath%>)]]"> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/enumField.html: -------------------------------------------------------------------------------- 1 | required <%}%>> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/fileField.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/fpNumberField.html: -------------------------------------------------------------------------------- 1 | required <%}%> 6 | error-message="[[<%-errorBindPath%>]]" 7 | invalid="[[_isInvalid(<%-errorBindPath%>)]]"> 8 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/numberField.html: -------------------------------------------------------------------------------- 1 | print "required" <%}%> 5 | error-message="[[<%-errorBindPath%>]]" 6 | invalid="[[_isInvalid(<%-errorBindPath%>)]]"> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/textField.html: -------------------------------------------------------------------------------- 1 | required <%}%> 4 | <% if (maxLength != null) { %>maxlength="<%-maxLength%>" <%}%> 5 | error-message="[[<%-errorBindPath%>]]" 6 | invalid="[[_isInvalid(<%-errorBindPath%>)]]"> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/fields/template/timeField.html: -------------------------------------------------------------------------------- 1 | required <% } %> 4 | <% if (maxLength) { %> maxlength="<%-maxLength%>"<% } %> 5 | error-message="[[<%-errorBindPath%>]]" 6 | invalid="[[_isInvalid(<%-errorBindPath%>)]]"> 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/common/template-model.ts: -------------------------------------------------------------------------------- 1 | export interface CommonTemplateModel { 2 | componentName: string; 3 | className: string; 4 | relDirShift: string; 5 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/entity-cards/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {Entity, View} from "../../../common/model/cuba-model"; 3 | 4 | export interface EntityCardsTemplateModel extends CommonTemplateModel { 5 | entity: Entity, 6 | view: View, 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/entity-edit/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {Entity, View} from "../../../common/model/cuba-model"; 3 | 4 | export interface EntityEditTemplateModel extends CommonTemplateModel { 5 | view: View, 6 | entity: Entity, 7 | imports: string[], 8 | fields: string[] 9 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/entity-list/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {Entity, View} from "../../../common/model/cuba-model"; 3 | 4 | export interface EntityListTemplateModel extends CommonTemplateModel { 5 | entity: Entity, 6 | view: View, 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/entity-management/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {entityManagementListType} from "./params"; 3 | 4 | export interface EntityManagementTemplateModel extends CommonTemplateModel { 5 | listComponentName: string; 6 | editComponentName: string; 7 | listType: entityManagementListType 8 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "clientBaseTech": "Polymer", 3 | "bower": true 4 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/query-results/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {RestQuery} from "../../../common/model/cuba-model"; 3 | 4 | export interface QueryResultsTemplateModel extends CommonTemplateModel { 5 | query: RestQuery; 6 | fields: string[]; 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/service-data/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {RestService, RestServiceMethod} from "../../../common/model/cuba-model"; 3 | 4 | export interface ServiceDataTemplateModel extends CommonTemplateModel { 5 | method: RestServiceMethod; 6 | service: RestService; 7 | fields: string[]; 8 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/polymer2/service-form/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from "../common/template-model"; 2 | import {RestService, RestServiceMethod} from "../../../common/model/cuba-model"; 3 | 4 | export interface ServiceFormTemplateModel extends CommonTemplateModel { 5 | method: RestServiceMethod; 6 | service: RestService; 7 | fields: string[]; 8 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/.env: -------------------------------------------------------------------------------- 1 | REACT_NATIVE_APP_CUBA_URL="http://localhost:8080/<%= project.modulePrefix %>/rest/" 2 | REACT_NATIVE_APP_REST_CLIENT_ID=<%= project.restClientId %> 3 | REACT_NATIVE_APP_REST_CLIENT_SECRET=<%= project.restClientSecret %> -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | .expo/* 3 | .idea/* 4 | npm-debug.* 5 | *.jks 6 | *.p8 7 | *.p12 8 | *.key 9 | *.mobileprovision 10 | *.orig.* 11 | web-build/ 12 | web-report/ 13 | 14 | # macOS 15 | .DS_Store 16 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {AsyncStorage} from 'react-native'; 3 | import {registerBase64} from "./util/base64"; 4 | import {CubaAppProvider} from "@cuba-platform/react-core"; 5 | import {Root} from "./components/Root"; 6 | import {cubaREST, REST_TOKEN_STORAGE_KEY} from './rest/rest'; 7 | 8 | registerBase64(); 9 | 10 | export default function App() { 11 | return ( 12 | AsyncStorage.getItem(REST_TOKEN_STORAGE_KEY)}> 13 | 14 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/react-native/app/template/assets/icon.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/react-native/app/template/assets/splash.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo', 'module:react-native-dotenv'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/rest/errorCodes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Error code indicating that authorization grant is not valid (for example, login credentials are incorrect). 3 | * Refer to OAuth 2.0 specification at https://tools.ietf.org/html/rfc6749#section-5.2 for more details 4 | */ 5 | export const OAUTH2_INVALID_GRANT = 'invalid_grant'; -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/rest/rest.ts: -------------------------------------------------------------------------------- 1 | import { initializeApp } from "@cuba-platform/rest"; 2 | import { REACT_NATIVE_APP_CUBA_URL, REACT_NATIVE_APP_REST_CLIENT_ID, REACT_NATIVE_APP_REST_CLIENT_SECRET } from "react-native-dotenv"; 3 | 4 | export const cubaREST = initializeApp({ 5 | name: '<%=project.namespace%>', 6 | apiUrl: REACT_NATIVE_APP_CUBA_URL, 7 | restClientId: REACT_NATIVE_APP_REST_CLIENT_ID, 8 | restClientSecret: REACT_NATIVE_APP_REST_CLIENT_SECRET, 9 | }); 10 | 11 | export const REST_TOKEN_STORAGE_KEY = "cubaAccessToken"; 12 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/styles/palette.ts: -------------------------------------------------------------------------------- 1 | export const colors = { 2 | primary: '#3D88EC', 3 | 4 | error: "#bb0000", 5 | 6 | borders: '#EAEAEA', 7 | placeholders: '#C7C7C7', 8 | 9 | textPrimary: '#3D3D3D', 10 | textInverted: '#FFFFFF', 11 | }; 12 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "experimentalDecorators": true, 5 | "jsx": "react-native", 6 | "lib": ["dom", "esnext"], 7 | "moduleResolution": "node", 8 | "noEmit": true, 9 | "skipLibCheck": true, 10 | "resolveJsonModule": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/app/template/util/base64.ts: -------------------------------------------------------------------------------- 1 | import * as base64 from 'base-64'; 2 | 3 | declare const global; 4 | export function registerBase64() { 5 | if (!global.btoa) { 6 | global.btoa = base64.encode; 7 | } 8 | 9 | if (!global.atob) { 10 | global.atob = base64.decode; 11 | } 12 | } 13 | 14 | registerBase64(); 15 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-native/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "clientBaseTech": "React Native", 3 | "bower": false 4 | } 5 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/.env.development.local: -------------------------------------------------------------------------------- 1 | REACT_APP_CUBA_URL=http://localhost:8080/<%= project.modulePrefix %>/rest/ 2 | REACT_APP_REST_CLIENT_ID=<%= project.restClientId %> 3 | REACT_APP_REST_CLIENT_SECRET=<%= project.restClientSecret %> -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/.env.production.local: -------------------------------------------------------------------------------- 1 | PUBLIC_URL=/<%= basePath %>/ 2 | REACT_APP_CUBA_URL=/<%= project.modulePrefix %>/rest/ 3 | REACT_APP_REST_CLIENT_ID=<%= project.restClientId %> 4 | REACT_APP_REST_CLIENT_SECRET=<%= project.restClientSecret %> -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/README.md: -------------------------------------------------------------------------------- 1 | # React Front-end Client for CUBA Platform 2 | 3 | This project was generated with [@cuba-platform/front-generator](https://github.com/cuba-platform/frontend). 4 | 5 | Install dependencies: 6 | 7 | ```bash 8 | npm install 9 | ``` 10 | 11 | Run project: 12 | 13 | ```bash 14 | npm run start 15 | ``` 16 | 17 | This will launch a dev server and allow you to access your app at `localhost:3000`. 18 | 19 | ### Learn More 20 | 21 | React client documentation is available [here](https://doc.cuba-platform.com/frontend). 22 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/_editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/_gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # testing 5 | /coverage 6 | 7 | # production 8 | /build 9 | /build-gradle 10 | 11 | # misc 12 | .DS_Store 13 | 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | 18 | .idea 19 | .vscode 20 | .gradle -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/images.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' 2 | declare module '*.png' 3 | declare module '*.jpg' 4 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "<%= project.name %>", 3 | "name": "<%= title %>", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/App.css: -------------------------------------------------------------------------------- 1 | .main-layout { 2 | height: 100%; 3 | } 4 | 5 | .layout-container.ant-layout { 6 | min-height: initial; 7 | } 8 | 9 | .layout-sider { 10 | background: #ffffff; 11 | } 12 | 13 | .layout-content { 14 | padding: 24px 24px 24px; 15 | } 16 | 17 | .narrow-layout { 18 | max-width: 1024px; 19 | margin: auto; 20 | } 21 | 22 | .narrow-layout.ant-card { 23 | max-width: 1024px; 24 | margin: auto; 25 | } 26 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/App.test.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | import {MainStore} from "@cuba-platform/react-core"; 5 | import {initializeApp} from "@cuba-platform/rest"; 6 | import {IntlProvider} from 'react-intl'; 7 | 8 | it('renders without crashing', () => { 9 | const div = document.createElement('div'); 10 | ReactDOM.render(, div); 11 | ReactDOM.unmountComponentAtNode(div); 12 | }); 13 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/CenteredLoader.css: -------------------------------------------------------------------------------- 1 | .centered-loader-icon { 2 | font-size: 24px; 3 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/CenteredLoader.tsx: -------------------------------------------------------------------------------- 1 | import { LoadingOutlined } from '@ant-design/icons'; 2 | import Centered from './common/Centered'; 3 | import * as React from 'react'; 4 | import './CenteredLoader.css'; 5 | 6 | export class CenteredLoader extends React.Component { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/common/Centered.css: -------------------------------------------------------------------------------- 1 | ._centered { 2 | width: 100vw; 3 | height: 100vh; 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/common/Centered.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import {ReactNode} from "react"; 3 | import './Centered.css'; 4 | 5 | export default function Centered({children}: {children?: ReactNode}) { 6 | return ( 7 |
8 | {children} 9 |
10 | ) 11 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/header/AppHeader.css: -------------------------------------------------------------------------------- 1 | .app-header { 2 | display: flex; 3 | justify-content: space-between; 4 | color: #CCCCCC; 5 | } 6 | 7 | .user-panel > .panelelement { 8 | margin: 6px; 9 | border: 0; 10 | } 11 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/header/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/react-typescript/app/template/src/app/header/logo.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/home/HomePage.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import {FormattedMessage} from 'react-intl'; 3 | 4 | class HomePage extends React.Component { 5 | 6 | render() { 7 | return( 8 |
9 | <%=title%>! 10 |
11 | ) 12 | } 13 | } 14 | 15 | export default HomePage; 16 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/login/Login.css: -------------------------------------------------------------------------------- 1 | .login-form { 2 | border-radius: 4px; 3 | background: #fff; 4 | padding: 32px 32px 0; 5 | min-width: 300px; 6 | box-shadow: 0 0 50px 0 rgba(0,0,0,0.2); 7 | } 8 | 9 | .login-form > .title { 10 | text-align: center; 11 | margin-bottom: 24px; 12 | font-size: 20px; 13 | } 14 | 15 | .login-form > .logo { 16 | display: block; 17 | margin: 0 auto 12px; 18 | } 19 | 20 | .language-switcher-container { 21 | float: right; 22 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/app/login/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/generators/react-typescript/app/template/src/app/login/logo.png -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/config.ts: -------------------------------------------------------------------------------- 1 | export const CUBA_APP_URL = process.env.REACT_APP_CUBA_URL ?? '/app/rest/'; 2 | export const REST_CLIENT_ID = process.env.REACT_APP_REST_CLIENT_ID ?? "client"; 3 | export const REST_CLIENT_SECRET = process.env.REACT_APP_REST_CLIENT_SECRET ?? "secret"; 4 | 5 | export const DEFAULT_COUNT = 10; // Typical amount of entities to be loaded on browse screens -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/i18n/LanguageSwitcher.css: -------------------------------------------------------------------------------- 1 | .language-switcher.-header.ant-select { 2 | background: none; 3 | color: #CCCCCC; 4 | } 5 | 6 | .language-switcher.-header .ant-select-arrow { 7 | color: #CCCCCC; 8 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/i18n/localeCaptions.ts.ejs: -------------------------------------------------------------------------------- 1 | const localeCaptions = { 2 | <% if (isLocaleUsed('en')) { -%> 3 | 'en': 'English', 4 | <% } -%> 5 | <% if (isLocaleUsed('fr')) { -%> 6 | 'fr': 'Français', 7 | <% } -%> 8 | <% if (isLocaleUsed('ru')) { -%> 9 | 'ru': 'Русский', 10 | <% } -%> 11 | <% if (isLocaleUsed('zh-cn')) { -%> 12 | 'zh-cn': '中文', 13 | <% } -%> 14 | }; 15 | 16 | export default localeCaptions; 17 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/index.css: -------------------------------------------------------------------------------- 1 | html, body, #root { 2 | height: 100%; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | font-family: sans-serif; 9 | background: #fafafa; 10 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/tsconfig.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json" 3 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/app/template/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs" 5 | } 6 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/blank-component/params.ts: -------------------------------------------------------------------------------- 1 | import {StudioTemplateProperty, StudioTemplatePropertyType} from "../../../common/studio/studio-model"; 2 | 3 | export const blankComponentParams: StudioTemplateProperty[] = [ 4 | { 5 | caption: "Component class name", 6 | code: "componentName", 7 | propertyType: StudioTemplatePropertyType.POLYMER_COMPONENT_NAME, 8 | required: true 9 | } 10 | ]; -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/blank-component/template/Component.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export class <%= className %> extends React.Component { 4 | render() { 5 | return( 6 |
7 | <%= className %> 8 |
9 | ) 10 | } 11 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/common/base-entity-screen-generator/params.ts: -------------------------------------------------------------------------------- 1 | import {Entity} from '../../../../common/model/cuba-model'; 2 | 3 | export interface BaseEntityScreenAnswers { 4 | entity: Entity; 5 | listShowIdAttr?: boolean; 6 | listIdAttrPos?: number; 7 | editIdAttrPos?: number; 8 | idAttrName?: string; // Will be asked for if not found in project model 9 | } 10 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/common/base-entity-screen-generator/template-model.ts: -------------------------------------------------------------------------------- 1 | import {CommonTemplateModel} from '../template-model'; 2 | 3 | export interface BaseEntityScreenTemplateModel extends CommonTemplateModel { 4 | stringIdName?: string; 5 | } 6 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/common/questions.ts: -------------------------------------------------------------------------------- 1 | import {StudioTemplatePropertyType} from '../../../common/studio/studio-model'; 2 | 3 | export const idAttrNameQuestions = [ 4 | { 5 | code: 'idAttrName', 6 | caption: 'You have chosen a String ID entity, but we could not find the ID attribute name in the project model. \n' + 7 | 'What is the ID attribute name?', 8 | propertyType: StudioTemplatePropertyType.STRING, 9 | required: true 10 | } 11 | ]; 12 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/entity-cards/template-model.ts: -------------------------------------------------------------------------------- 1 | import {Entity, EntityAttribute, View} from "../../../common/model/cuba-model"; 2 | import {BaseEntityScreenTemplateModel} from '../common/base-entity-screen-generator/template-model'; 3 | 4 | export interface EntityCardsTemplateModel extends BaseEntityScreenTemplateModel { 5 | nameLiteral: string; 6 | entity: Entity, 7 | view: View, 8 | attributes: EntityAttribute[] 9 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/entity-management/entity-management-en.json: -------------------------------------------------------------------------------- 1 | { 2 | "management.browser.delete.areYouSure": "Are you sure you want to delete {instanceName}?", 3 | "management.browser.delete.ok": "Delete", 4 | "management.browser.noItems": "No data", 5 | "management.editor.validationError": "Validation Error. Please check the data you entered.", 6 | "management.editor.success": "Entity has been updated" 7 | } 8 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/entity-management/entity-management-fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "management.browser.delete.areYouSure": "Êtes-vous sûr de vouloir supprimer {instanceName}?", 3 | "management.browser.delete.ok": "Supprimer", 4 | "management.browser.noItems": "Aucune donnée", 5 | "management.editor.validationError": "Erreur de validation. Veuillez vérifier votre saisie.", 6 | "management.editor.success": "L'entité a été mise à jour" 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/entity-management/entity-management-ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "management.browser.delete.areYouSure": "Вы уверены, что хотите удалить {instanceName}?", 3 | "management.browser.delete.ok": "Удалить", 4 | "management.browser.noItems": "Нет данных", 5 | "management.editor.validationError": "Ошибка валидации. Пожалуйста, проверьте введенные данные.", 6 | "management.editor.success": "Сущность успешно сохранена" 7 | } 8 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/entity-management/entity-management-zh-cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "management.browser.delete.areYouSure": "确定要删除 {instanceName}?", 3 | "management.browser.delete.ok": "删除", 4 | "management.browser.noItems": "暂无数据", 5 | "management.editor.validationError": "验证错误。请检查输入的数据", 6 | "management.editor.success": "实体已更新" 7 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/react-typescript/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "clientBaseTech": "React", 3 | "bower": false 4 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/sdk/README.md: -------------------------------------------------------------------------------- 1 | # TypeScript SDK 2 | 3 | Documentation is available [here](https://doc.cuba-platform.com/frontend). 4 | -------------------------------------------------------------------------------- /packages/front-generator/src/generators/sdk/all/index.ts: -------------------------------------------------------------------------------- 1 | import {commonGenerationOptionsConfig} from "../../../common/cli-options"; 2 | import {SdkAllGenerator} from "../sdk-generator"; 3 | 4 | export const options = commonGenerationOptionsConfig; 5 | export const params = []; 6 | export const generator = SdkAllGenerator; -------------------------------------------------------------------------------- /packages/front-generator/src/generators/sdk/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "clientBaseTech": "Typescript", 3 | "bower": false 4 | } -------------------------------------------------------------------------------- /packages/front-generator/src/generators/sdk/model/index.ts: -------------------------------------------------------------------------------- 1 | import {commonGenerationOptionsConfig} from "../../../common/cli-options"; 2 | import {SdkModelGenerator} from "../sdk-generator"; 3 | 4 | export const options = commonGenerationOptionsConfig; 5 | export const params = []; 6 | export const generator = SdkModelGenerator; -------------------------------------------------------------------------------- /packages/front-generator/src/test/common/test-utils.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | 3 | export async function expectRejectedPromise(promiseCallback: () => Promise, errorMessage?: string) { 4 | try { 5 | await promiseCallback(); 6 | expect.fail('The promise is fulfilled'); 7 | } catch (err: any) { 8 | if (errorMessage != null) { 9 | expect(err.message).to.equal(errorMessage); 10 | } 11 | return; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/answers/int-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntegerIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdMgtTableEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntegerIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdMgtTableBrowse", 12 | "listType": "table", 13 | "entity": { 14 | "name": "scr_IntegerIdTestEntity" 15 | }, 16 | "managementComponentName": "int-id-management-table" 17 | } -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/answers/string-id-management-table-explicit-id-name.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity" 18 | }, 19 | "managementComponentName": "string-id-mgt-table-management", 20 | "idAttrName": "identifier" 21 | } -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/answers/string-id-management-table-no-id-name.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity" 18 | }, 19 | "managementComponentName": "string-id-mgt-table-management" 20 | } -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/answers/string-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity", 18 | "idAttributeName": "identifier" 19 | }, 20 | "managementComponentName": "string-id-mgt-table-management" 21 | } -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/query-model-car.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "ecoCars", 4 | "jpql": "select c from mpg$Car c where c.ecoRank = 3", 5 | "entity": "mpg$Car", 6 | "view": "_local", 7 | "params": [] 8 | }, 9 | { 10 | "name": "carsByType", 11 | "jpql": "select c from mpg$Car c where c.carType = :carType", 12 | "entity": "mpg$Car", 13 | "view": "_local", 14 | "params": [ 15 | { 16 | "name": "carType", 17 | "type": "java.lang.String" 18 | } 19 | ] 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/react-client/.env.development.local: -------------------------------------------------------------------------------- 1 | REACT_APP_CUBA_URL=http://localhost:8080/app/rest/ 2 | REACT_APP_REST_CLIENT_ID=rest-client-id-9876 3 | REACT_APP_REST_CLIENT_SECRET=rest-secret-54321 -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/react-client/.env.production.local: -------------------------------------------------------------------------------- 1 | PUBLIC_URL=/app-front/ 2 | REACT_APP_CUBA_URL=/app/rest/ 3 | REACT_APP_REST_CLIENT_ID=rest-client-id-9876 4 | REACT_APP_REST_CLIENT_SECRET=rest-secret-54321 -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/react-client/src/app/component/BlankComponent.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | export class BlankComponent extends React.Component { 4 | render() { 5 | return
BlankComponent
; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/templates/EntityManagementEditor.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/test/fixtures/templates/EntityManagementEditor.tsx -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/templates/i18nMappings.ts: -------------------------------------------------------------------------------- 1 | import en from "./en.json"; 2 | import enUs from "antd/es/locale/en_US"; 3 | import ru from "./ru.json"; 4 | import ruRu from "antd/es/locale/ru_RU"; 5 | 6 | export const antdLocaleMapping = { 7 | en: enUs, 8 | ru: ruRu 9 | }; 10 | 11 | export const messagesMapping = { 12 | en: en, 13 | ru: ru 14 | }; 15 | -------------------------------------------------------------------------------- /packages/front-generator/src/test/fixtures/view-properties--association-o2o.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "name", 4 | "lazy": false 5 | }, 6 | { 7 | "name": "datatypesTestEntity", 8 | "entity": "scr_DatatypesTestEntity", 9 | "lazy": false 10 | } 11 | ] 12 | -------------------------------------------------------------------------------- /packages/front-generator/src/test/generator.test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/packages/front-generator/src/test/generator.test.ts -------------------------------------------------------------------------------- /packages/front-generator/test/e2e/expect/entities/ScrUserInfo.ts: -------------------------------------------------------------------------------- 1 | import { BaseUuidEntity } from "./base/sys$BaseUuidEntity"; 2 | import { Car } from "./scr$Car"; 3 | export class ScrUserInfo extends BaseUuidEntity { 4 | static NAME = "ScrUserInfo"; 5 | firstName?: string | null; 6 | lastName?: string | null; 7 | favouriteCars?: Car | null; 8 | } 9 | export type ScrUserInfoViewName = "_minimal" | "_local" | "_base"; 10 | export type ScrUserInfoView = never; 11 | -------------------------------------------------------------------------------- /packages/front-generator/test/e2e/expect/enums/enums.ts: -------------------------------------------------------------------------------- 1 | export enum CarType { 2 | SEDAN = "SEDAN", 3 | HATCHBACK = "HATCHBACK" 4 | } 5 | 6 | export enum EcoRank { 7 | EURO1 = "EURO1", 8 | EURO2 = "EURO2", 9 | EURO3 = "EURO3" 10 | } 11 | 12 | -------------------------------------------------------------------------------- /packages/front-generator/test/e2e/fixtures/projectModel-empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "project": { 3 | "name": "empty-prj", 4 | "namespace": "emptyprj", 5 | "modulePrefix": "app", 6 | "modelPrefix": "app" 7 | }, 8 | "entities": [], 9 | "enums": [], 10 | "baseProjectEntities": [], 11 | "views": [], 12 | "restQueries": [], 13 | "restServices": [] 14 | } -------------------------------------------------------------------------------- /packages/front-generator/test/e2e/fixtures/sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "outDir": "./lib", 6 | "sourceMap": true, 7 | "strict": true, 8 | "types": [] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/front-generator/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require ts-node/register 2 | src/test/**/*.test.ts 3 | --timeout 0 4 | -------------------------------------------------------------------------------- /packages/front-generator/tsconfig.declarations.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "emitDeclarationOnly": true, 6 | "outDir": "./lib" 7 | }, 8 | "include": [ 9 | "custom_types/**/*.ts", 10 | "src/index.ts" 11 | ] 12 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .studio 3 | *.ipr 4 | *.iml 5 | *.iws 6 | build/* 7 | deploy/* 8 | modules/*/build/* 9 | .idea/* 10 | out 11 | test-run -------------------------------------------------------------------------------- /sample-car-rent-7-1/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent-7-1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /sample-car-rent-7-1/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/core/src/com/company/scr/spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/global/src/com/company/scr/entity/constraints/messages.properties: -------------------------------------------------------------------------------- 1 | Car.ReliabilityPolicyCompliant.constraintViolationMessage = Adding cars that are both older than 10 years and have mileage greater than 100 000 is prohibited 2 | Car.PurchasedAfterManufactured.constraintViolationMessage = Purchase date cannot precede manufacture date 3 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/global/src/com/company/scr/entity/constraints/messages_ru.properties: -------------------------------------------------------------------------------- 1 | Car.ReliabilityPolicyCompliant.constraintViolationMessage = Нельзя добавить автомобиль, выпущенный более 10 лет назад, если он имеет пробег свыше 100 000 2 | Car.PurchasedAfterManufactured.constraintViolationMessage = Дата покупки не может предшествовать дате изготовления 3 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/global/src/com/company/scr/metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web-dispatcher-spring.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web-menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web-permissions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web-screens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/messages.properties: -------------------------------------------------------------------------------- 1 | 2 | application.caption = CUBA Application 3 | application.logoLabel = CUBA Application 4 | application.logoImage = branding/app-icon-menu.png 5 | application.welcomeText = Welcome to CUBA Application! 6 | 7 | loginWindow.caption = CUBA Login 8 | loginWindow.welcomeLabel = Welcome to CUBA! 9 | loginWindow.logoImage = branding/app-icon-login.png 10 | 11 | menu-config.application-scr = Application 12 | menu-config.scr$Car.browse=Cars 13 | menu-config.scr$FavoriteCar.browse=Favorite Cars 14 | menu-config.scr$Garage.browse=Garages 15 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/car/CarBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.car; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.Car; 5 | 6 | @UiController("scr$Car.browse") 7 | @UiDescriptor("car-browse.xml") 8 | @LookupComponent("carsTable") 9 | @LoadDataBeforeShow 10 | public class CarBrowse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/car/CarEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.car; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.Car; 5 | 6 | @UiController("scr$Car.edit") 7 | @UiDescriptor("car-edit.xml") 8 | @EditedEntityContainer("carDc") 9 | @LoadDataBeforeShow 10 | public class CarEdit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/car/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=Car browser 2 | editorCaption=Car editor -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/favoritecar/FavoriteCarBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.favoritecar; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.FavoriteCar; 5 | 6 | @UiController("scr$FavoriteCar.browse") 7 | @UiDescriptor("favorite-car-browse.xml") 8 | @LookupComponent("favoriteCarsTable") 9 | @LoadDataBeforeShow 10 | public class FavoriteCarBrowse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/favoritecar/FavoriteCarEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.favoritecar; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.FavoriteCar; 5 | 6 | @UiController("scr$FavoriteCar.edit") 7 | @UiDescriptor("favorite-car-edit.xml") 8 | @EditedEntityContainer("favoriteCarDc") 9 | @LoadDataBeforeShow 10 | public class FavoriteCarEdit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/favoritecar/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=FavoriteCar browser 2 | editorCaption=FavoriteCar editor -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/garage/GarageBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.garage; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.Garage; 5 | 6 | @UiController("scr$Garage.browse") 7 | @UiDescriptor("garage-browse.xml") 8 | @LookupComponent("garagesTable") 9 | @LoadDataBeforeShow 10 | public class GarageBrowse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/garage/GarageEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.garage; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.Garage; 5 | 6 | @UiController("scr$Garage.edit") 7 | @UiDescriptor("garage-edit.xml") 8 | @EditedEntityContainer("garageDc") 9 | @LoadDataBeforeShow 10 | public class GarageEdit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/src/com/company/scr/web/screens/garage/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=Garage browser 2 | editorCaption=Garage editor -------------------------------------------------------------------------------- /sample-car-rent-7-1/modules/web/web/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample-car-rent-7-1/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'sample-car-rent-7-1' 2 | def modulePrefix = 'app' 3 | include(":${modulePrefix}-global", ":${modulePrefix}-core", ":${modulePrefix}-web") 4 | project(":${modulePrefix}-global").projectDir = new File(settingsDir, 'modules/global') 5 | project(":${modulePrefix}-core").projectDir = new File(settingsDir, 'modules/core') 6 | project(":${modulePrefix}-web").projectDir = new File(settingsDir, 'modules/web') -------------------------------------------------------------------------------- /sample-car-rent/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .studio 3 | *.ipr 4 | *.iml 5 | *.iws 6 | build/* 7 | deploy/* 8 | modules/*/build/* 9 | out 10 | test-run 11 | .idea 12 | -------------------------------------------------------------------------------- /sample-car-rent/README.md: -------------------------------------------------------------------------------- 1 | # CUBA Sample Project - Car Rent 2 | Sample CUBA project with non trivial model, which used as base for tests in 3 | [@cuba-platform/front-generator](https://github.com/cuba-platform/frontend). 4 | 5 | ## Data 6 | ### Users 7 | admin/admin
8 | mechanic/1 9 | manager/2 10 | 11 | ## Development 12 | ### Create Init Script With Data Already Added in App 13 | * Export data from table 14 | ```bash 15 | sudo -u postgres pg_dump --table= --data-only --column-inserts scr 16 | ``` 17 | * Paste generated script to [30.create-db.sql](modules/core/db/init/hsql/30.create-db.sql) 18 | * Script will be executed when database will be created next time -------------------------------------------------------------------------------- /sample-car-rent/extra.gradle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/extra.gradle -------------------------------------------------------------------------------- /sample-car-rent/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /sample-car-rent/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jan 18 16:49:24 SAMT 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /sample-car-rent/modules/core/src/com/company/scr/core/FakeDataGenerator.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.core; 2 | 3 | import com.haulmont.chile.core.model.MetaClass; 4 | 5 | /** 6 | * @author minaev 7 | * @version $Id$ 8 | */ 9 | public interface FakeDataGenerator { 10 | 11 | String NAME = "FakeDataGenerator"; 12 | 13 | void generate(MetaClass metaClass, int amount); 14 | 15 | void cleanup(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /sample-car-rent/modules/core/src/com/company/scr/core/FakeDataGeneratorMBean.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.core; 2 | 3 | import org.springframework.jmx.export.annotation.ManagedOperation; 4 | import org.springframework.jmx.export.annotation.ManagedResource; 5 | 6 | /** 7 | * @author minaev 8 | * @version $Id$ 9 | */ 10 | @ManagedResource(description = "Generates fake data") 11 | public interface FakeDataGeneratorMBean { 12 | 13 | @ManagedOperation 14 | String generate(String entityName, int amount); 15 | 16 | @ManagedOperation 17 | String cleanup(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /sample-car-rent/modules/global/src/com/company/scr/entity/constraints/messages.properties: -------------------------------------------------------------------------------- 1 | Car.ReliabilityPolicyCompliant.constraintViolationMessage = Adding cars that are both older than 10 years and have mileage greater than 100 000 is prohibited 2 | Car.PurchasedAfterManufactured.constraintViolationMessage = Purchase date cannot precede manufacture date 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/global/src/com/company/scr/entity/constraints/messages_ru.properties: -------------------------------------------------------------------------------- 1 | Car.ReliabilityPolicyCompliant.constraintViolationMessage = Нельзя добавить автомобиль, выпущенный более 10 лет назад, если он имеет пробег свыше 100 000 2 | Car.PurchasedAfterManufactured.constraintViolationMessage = Дата покупки не может предшествовать дате изготовления 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/global/src/com/company/scr/metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample-car-rent/modules/gui/src/com/company/scr/gui/messages.properties: -------------------------------------------------------------------------------- 1 | 2 | application.caption = CUBA Application 3 | application.logoImage = branding/app-icon-menu.png 4 | 5 | loginWindow.caption = CUBA Login 6 | loginWindow.welcomeLabel = Welcome to CUBA! 7 | loginWindow.logoImage = branding/app-icon-login.png 8 | -------------------------------------------------------------------------------- /sample-car-rent/modules/gui/src/com/company/scr/screens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/src/com/company/scr/portal/command/LoginUserCommand.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.portal.command; 2 | 3 | 4 | @SuppressWarnings({"UnusedDeclaration"}) 5 | public class LoginUserCommand { 6 | 7 | private String login; 8 | 9 | private String password; 10 | 11 | public String getLogin() { 12 | return login; 13 | } 14 | 15 | public void setLogin(String login) { 16 | this.login = login; 17 | } 18 | 19 | public String getPassword() { 20 | return password; 21 | } 22 | 23 | public void setPassword(String password) { 24 | this.password = password; 25 | } 26 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/src/com/company/scr/portal/messages.properties: -------------------------------------------------------------------------------- 1 | page.head = Head sample -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/WEB-INF/templates/error/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Not found 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

404

13 | 14 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/WEB-INF/templates/error/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Not found 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

500

13 | 14 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/WEB-INF/templates/maintain.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Under construction 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

Sorry, resource is unavailable

13 | 14 | Please, try again after 20 min 15 | 16 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/resources/css/common.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sample-car-rent/modules/portal/web/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/portal/web/resources/favicon.ico -------------------------------------------------------------------------------- /sample-car-rent/modules/readme.md: -------------------------------------------------------------------------------- 1 | `master` branch should not contain `polymer-client` module -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web-dispatcher-spring.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web-permissions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/ScrApp.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web; 2 | 3 | import com.haulmont.cuba.web.DefaultApp; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | public class ScrApp extends DefaultApp { 7 | 8 | @Override @NotNull 9 | protected String routeTopLevelWindowId() { 10 | return "mainWindow"; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/car/CarBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.car; 2 | 3 | import com.haulmont.cuba.gui.components.AbstractLookup; 4 | 5 | public class CarBrowse extends AbstractLookup { 6 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/car/CarEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.car; 2 | 3 | import com.haulmont.cuba.gui.components.AbstractEditor; 4 | import com.company.scr.entity.Car; 5 | 6 | public class CarEdit extends AbstractEditor { 7 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/car/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption = Car browser 2 | editCaption = Car editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/carrent/messages.properties: -------------------------------------------------------------------------------- 1 | caption = Car Rents 2 | browseCaption = CarRent browser 3 | mainTab = Main 4 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/favoritecar/messages.properties: -------------------------------------------------------------------------------- 1 | caption = Favorite Cars 2 | browseCaption = FavoriteCar browser 3 | mainTab = Main 4 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/garage/GarageBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.garage; 2 | 3 | import com.haulmont.cuba.gui.components.AbstractLookup; 4 | 5 | public class GarageBrowse extends AbstractLookup { 6 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/garage/GarageEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.garage; 2 | 3 | import com.haulmont.cuba.gui.components.AbstractEditor; 4 | import com.company.scr.entity.Garage; 5 | 6 | public class GarageEdit extends AbstractEditor { 7 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/garage/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption = Garage browser 2 | editCaption = Garage editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2mtestentity/AssociationM2MTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationm2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationM2MTestEntity; 5 | 6 | @UiController("scr_AssociationM2MTestEntity.browse") 7 | @UiDescriptor("association-m2m-test-entity-browse.xml") 8 | @LookupComponent("associationM2MTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class AssociationM2MTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2mtestentity/AssociationM2MTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationm2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationM2MTestEntity; 5 | 6 | @UiController("scr_AssociationM2MTestEntity.edit") 7 | @UiDescriptor("association-m2m-test-entity-edit.xml") 8 | @EditedEntityContainer("associationM2MTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class AssociationM2MTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2mtestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=AssociationM2MTestEntity browser 2 | editorCaption=AssociationM2MTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2mtestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2mtestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2otestentity/AssociationM2OTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationm2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationM2OTestEntity; 5 | 6 | @UiController("scr_AssociationM2OTestEntity.browse") 7 | @UiDescriptor("association-m2o-test-entity-browse.xml") 8 | @LookupComponent("associationM2OTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class AssociationM2OTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2otestentity/AssociationM2OTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationm2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationM2OTestEntity; 5 | 6 | @UiController("scr_AssociationM2OTestEntity.edit") 7 | @UiDescriptor("association-m2o-test-entity-edit.xml") 8 | @EditedEntityContainer("associationM2OTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class AssociationM2OTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2otestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=AssociationM2OTestEntity browser 2 | editorCaption=AssociationM2OTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2otestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/associationm2otestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2mtestentity/AssociationO2MTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationo2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationO2MTestEntity; 5 | 6 | @UiController("scr_AssociationO2MTestEntity.browse") 7 | @UiDescriptor("association-o2m-test-entity-browse.xml") 8 | @LookupComponent("associationO2MTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class AssociationO2MTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2mtestentity/AssociationO2MTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationo2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationO2MTestEntity; 5 | 6 | @UiController("scr_AssociationO2MTestEntity.edit") 7 | @UiDescriptor("association-o2m-test-entity-edit.xml") 8 | @EditedEntityContainer("associationO2MTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class AssociationO2MTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2mtestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=AssociationO2MTestEntity browser 2 | editorCaption=AssociationO2MTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2mtestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2mtestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2otestentity/AssociationO2OTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationo2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationO2OTestEntity; 5 | 6 | @UiController("scr_AssociationO2OTestEntity.browse") 7 | @UiDescriptor("association-o2o-test-entity-browse.xml") 8 | @LookupComponent("associationO2OTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class AssociationO2OTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2otestentity/AssociationO2OTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.associationo2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.AssociationO2OTestEntity; 5 | 6 | @UiController("scr_AssociationO2OTestEntity.edit") 7 | @UiDescriptor("association-o2o-test-entity-edit.xml") 8 | @EditedEntityContainer("associationO2OTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class AssociationO2OTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2otestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=AssociationO2OTestEntity browser 2 | editorCaption=AssociationO2OTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2otestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/associationo2otestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositekeyentity/CompositeKeyEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositekeyentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositeKeyEntity; 5 | 6 | @UiController("scr_CompositeKeyEntity.browse") 7 | @UiDescriptor("composite-key-entity-browse.xml") 8 | @LookupComponent("compositeKeyEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class CompositeKeyEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositekeyentity/CompositeKeyEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositekeyentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositeKeyEntity; 5 | 6 | @UiController("scr_CompositeKeyEntity.edit") 7 | @UiDescriptor("composite-key-entity-edit.xml") 8 | @EditedEntityContainer("compositeKeyEntityDc") 9 | @LoadDataBeforeShow 10 | public class CompositeKeyEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2mtestentity/CompositionO2MTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositiono2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositionO2MTestEntity; 5 | 6 | @UiController("scr_CompositionO2MTestEntity.browse") 7 | @UiDescriptor("composition-o2m-test-entity-browse.xml") 8 | @LookupComponent("compositionO2MTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class CompositionO2MTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2mtestentity/CompositionO2MTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositiono2mtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositionO2MTestEntity; 5 | 6 | @UiController("scr_CompositionO2MTestEntity.edit") 7 | @UiDescriptor("composition-o2m-test-entity-edit.xml") 8 | @EditedEntityContainer("compositionO2MTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class CompositionO2MTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2mtestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=CompositionO2MTestEntity browser 2 | editorCaption=CompositionO2MTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2mtestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2mtestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2otestentity/CompositionO2OTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositiono2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositionO2OTestEntity; 5 | 6 | @UiController("scr_CompositionO2OTestEntity.browse") 7 | @UiDescriptor("composition-o2o-test-entity-browse.xml") 8 | @LookupComponent("compositionO2OTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class CompositionO2OTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2otestentity/CompositionO2OTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.compositiono2otestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.CompositionO2OTestEntity; 5 | 6 | @UiController("scr_CompositionO2OTestEntity.edit") 7 | @UiDescriptor("composition-o2o-test-entity-edit.xml") 8 | @EditedEntityContainer("compositionO2OTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class CompositionO2OTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2otestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=CompositionO2OTestEntity browser 2 | editorCaption=CompositionO2OTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2otestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/compositiono2otestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity/DatatypesTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity; 5 | 6 | @UiController("scr_DatatypesTestEntity.browse") 7 | @UiDescriptor("datatypes-test-entity-browse.xml") 8 | @LookupComponent("datatypesTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity/DatatypesTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity; 5 | 6 | @UiController("scr_DatatypesTestEntity.edit") 7 | @UiDescriptor("datatypes-test-entity-edit.xml") 8 | @EditedEntityContainer("datatypesTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=DatatypesTestEntity browser 2 | editorCaption=DatatypesTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity2/DatatypesTestEntity2Browse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity2; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity2; 5 | 6 | @UiController("scr_DatatypesTestEntity2.browse") 7 | @UiDescriptor("datatypes-test-entity2-browse.xml") 8 | @LookupComponent("datatypesTestEntity2sTable") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntity2Browse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity2/DatatypesTestEntity2Edit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity2; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity2; 5 | 6 | @UiController("scr_DatatypesTestEntity2.edit") 7 | @UiDescriptor("datatypes-test-entity2-edit.xml") 8 | @EditedEntityContainer("datatypesTestEntity2Dc") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntity2Edit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity2/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=DatatypesTestEntity2 browser 2 | editorCaption=DatatypesTestEntity2 editor -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity2/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity2/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity3/DatatypesTestEntity3Browse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity3; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity3; 5 | 6 | @UiController("scr_DatatypesTestEntity3.browse") 7 | @UiDescriptor("datatypes-test-entity3-browse.xml") 8 | @LookupComponent("datatypesTestEntity3sTable") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntity3Browse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity3/DatatypesTestEntity3Edit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.datatypestestentity3; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DatatypesTestEntity3; 5 | 6 | @UiController("scr_DatatypesTestEntity3.edit") 7 | @UiDescriptor("datatypes-test-entity3-edit.xml") 8 | @EditedEntityContainer("datatypesTestEntity3Dc") 9 | @LoadDataBeforeShow 10 | public class DatatypesTestEntity3Edit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity3/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=DatatypesTestEntity3 browser 2 | editorCaption=DatatypesTestEntity3 editor -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity3/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/datatypestestentity3/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/deeplynestedtestentity/DeeplyNestedTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.deeplynestedtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DeeplyNestedTestEntity; 5 | 6 | @UiController("scr_DeeplyNestedTestEntity.browse") 7 | @UiDescriptor("deeply-nested-test-entity-browse.xml") 8 | @LookupComponent("deeplyNestedTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class DeeplyNestedTestEntityBrowse extends StandardLookup { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/deeplynestedtestentity/DeeplyNestedTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.deeplynestedtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.DeeplyNestedTestEntity; 5 | 6 | @UiController("scr_DeeplyNestedTestEntity.edit") 7 | @UiDescriptor("deeply-nested-test-entity-edit.xml") 8 | @EditedEntityContainer("deeplyNestedTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class DeeplyNestedTestEntityEdit extends StandardEditor { 11 | } 12 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/deeplynestedtestentity/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=DeeplyNestedTestEntity browser 2 | editorCaption=DeeplyNestedTestEntity editor 3 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/deeplynestedtestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/deeplynestedtestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/sparepart/SparePartBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.sparepart; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.SparePart; 5 | 6 | @UiController("scr$SparePart.browse") 7 | @UiDescriptor("spare-part-browse.xml") 8 | @LookupComponent("sparePartsTable") 9 | @LoadDataBeforeShow 10 | public class SparePartBrowse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/sparepart/SparePartEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.sparepart; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.SparePart; 5 | 6 | @UiController("scr$SparePart.edit") 7 | @UiDescriptor("spare-part-edit.xml") 8 | @EditedEntityContainer("sparePartDc") 9 | @LoadDataBeforeShow 10 | public class SparePartEdit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/sparepart/messages.properties: -------------------------------------------------------------------------------- 1 | browseCaption=SparePart browser 2 | editorCaption=SparePart editor -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/sparepart/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/sparepart/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/stringidtestentity/StringIdTestEntityBrowse.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.stringidtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.StringIdTestEntity; 5 | 6 | @UiController("scr_StringIdTestEntity.browse") 7 | @UiDescriptor("string-id-test-entity-browse.xml") 8 | @LookupComponent("stringIdTestEntitiesTable") 9 | @LoadDataBeforeShow 10 | public class StringIdTestEntityBrowse extends StandardLookup { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/stringidtestentity/StringIdTestEntityEdit.java: -------------------------------------------------------------------------------- 1 | package com.company.scr.web.screens.stringidtestentity; 2 | 3 | import com.haulmont.cuba.gui.screen.*; 4 | import com.company.scr.entity.test.StringIdTestEntity; 5 | 6 | @UiController("scr_StringIdTestEntity.edit") 7 | @UiDescriptor("string-id-test-entity-edit.xml") 8 | @EditedEntityContainer("stringIdTestEntityDc") 9 | @LoadDataBeforeShow 10 | public class StringIdTestEntityEdit extends StandardEditor { 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/stringidtestentity/messages.properties: -------------------------------------------------------------------------------- 1 | stringIdTestEntityBrowse.caption=StringIdTestEntity browser 2 | stringIdTestEntityEdit.caption=StringIdTestEntity editor -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/screens/stringidtestentity/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/src/com/company/scr/web/screens/stringidtestentity/messages_ru.properties -------------------------------------------------------------------------------- /sample-car-rent/modules/web/src/com/company/scr/web/technicalcertificate/messages.properties: -------------------------------------------------------------------------------- 1 | caption = Technical Certificates 2 | browseCaption = TechnicalCertificate browser 3 | mainTab = Main 4 | -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/branding/app-icon-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/themes/halo/branding/app-icon-login.png -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/branding/app-icon-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/themes/halo/branding/app-icon-menu.png -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/com.company.scr/app-component.scss: -------------------------------------------------------------------------------- 1 | @import "halo-ext"; 2 | 3 | @mixin com_company_scr { 4 | @include com_company_scr-halo-ext; 5 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/com.company.scr/halo-ext-defaults.scss: -------------------------------------------------------------------------------- 1 | /* Override global theme constants or define new ones here */ -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/com.company.scr/halo-ext.scss: -------------------------------------------------------------------------------- 1 | /* Define your theme modifications inside next mixin */ 2 | @mixin com_company_scr-halo-ext { 3 | 4 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuba-platform/frontend/bbe4f3d5d944b20fd077341770401a0f6dddc8ce/sample-car-rent/modules/web/themes/halo/favicon.ico -------------------------------------------------------------------------------- /sample-car-rent/modules/web/themes/halo/styles.scss: -------------------------------------------------------------------------------- 1 | @import "halo-defaults"; 2 | @import "com.company.scr/halo-ext-defaults"; 3 | @import "app-components"; 4 | @import "com.company.scr/halo-ext"; 5 | 6 | .halo { 7 | // include auto-generated app components SCSS 8 | @include app_components; 9 | 10 | @include com_company_scr-halo-ext; 11 | } -------------------------------------------------------------------------------- /sample-car-rent/modules/web/web/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample-car-rent/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'sample-car-rent' 2 | def modulePrefix = 'app' 3 | include(":${modulePrefix}-global", ":${modulePrefix}-core", ":${modulePrefix}-gui", ":${modulePrefix}-web", ":${modulePrefix}-portal") 4 | project(":${modulePrefix}-global" ).projectDir = new File(settingsDir, 'modules/global') 5 | project(":${modulePrefix}-core" ).projectDir = new File(settingsDir, 'modules/core') 6 | project(":${modulePrefix}-gui" ).projectDir = new File(settingsDir, 'modules/gui') 7 | project(":${modulePrefix}-web" ).projectDir = new File(settingsDir, 'modules/web') 8 | project(":${modulePrefix}-portal").projectDir = new File(settingsDir, 'modules/portal') 9 | -------------------------------------------------------------------------------- /sample-car-rent/studio-intellij.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /sample-car-rent/studio-settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /scripts/ci-bootstrap-backend.js: -------------------------------------------------------------------------------- 1 | const {runCmdSync} = require('./common'); 2 | 3 | const ciBootstrapBackend = () => { 4 | 5 | const backendAppDir = process.argv.length > 2 ? process.argv[2] : `sample-car-rent`; 6 | 7 | runCmdSync(`psql -c "create user cuba with encrypted password 'cuba';" -U postgres`); 8 | runCmdSync(`psql -c "alter user cuba createdb;" -U postgres`); 9 | runCmdSync(`${backendAppDir}/gradlew -v`); 10 | runCmdSync(`${backendAppDir}/gradlew -p ${backendAppDir} setupTomcat createDb --no-daemon`); 11 | runCmdSync(`${backendAppDir}/gradlew -p ${backendAppDir} assemble deploy start waitAppStarted --no-daemon`); 12 | }; 13 | 14 | ciBootstrapBackend(); 15 | -------------------------------------------------------------------------------- /scripts/generate-react-native-client-scr.js: -------------------------------------------------------------------------------- 1 | const gen = require('./generate-client-scr'); 2 | 3 | gen( 4 | 'React Native client SCR', 5 | 'react-native-client-scr', 6 | 'scripts/model/projectModel-scr.json', 7 | [ 8 | { command: 'react-native:app' } 9 | ] 10 | ); 11 | -------------------------------------------------------------------------------- /scripts/pack-given-client-libs.js: -------------------------------------------------------------------------------- 1 | const packClientLibs = require('./pack-client-libs'); 2 | 3 | const libs = process.argv.slice(2); 4 | 5 | packClientLibs(libs, libs); 6 | -------------------------------------------------------------------------------- /scripts/pack-react-client-libs.js: -------------------------------------------------------------------------------- 1 | const packClientLibs = require('./pack-client-libs'); 2 | 3 | packClientLibs( 4 | [ 5 | '@cuba-platform/front-generator', 6 | '@cuba-platform/rest', 7 | '@cuba-platform/react-core', 8 | '@cuba-platform/react-ui' 9 | ], 10 | [ 11 | '@cuba-platform/rest', 12 | '@cuba-platform/react-core', 13 | '@cuba-platform/react-ui' 14 | ] 15 | ); 16 | 17 | -------------------------------------------------------------------------------- /scripts/pack-react-native-client-libs.js: -------------------------------------------------------------------------------- 1 | const packClientLibs = require('./pack-client-libs'); 2 | 3 | packClientLibs( 4 | [ 5 | '@cuba-platform/front-generator', 6 | '@cuba-platform/rest', 7 | '@cuba-platform/react-core' 8 | ], 9 | [ 10 | '@cuba-platform/rest', 11 | '@cuba-platform/react-core' 12 | ] 13 | ); 14 | 15 | -------------------------------------------------------------------------------- /scripts/run-gradle.js: -------------------------------------------------------------------------------- 1 | const { runCmdSync, isWindows } = require("./common") 2 | const path = require('path'); 3 | 4 | let [, , ...scriptArg] = process.argv; 5 | scriptArg = scriptArg.join(" "); 6 | 7 | const basePath = process.cwd(); 8 | const scriptName = isWindows() ? 'gradlew.bat' : 'gradlew'; 9 | const pathToScript = path.join(basePath, 'sample-car-rent', scriptName); 10 | 11 | const cmd = `${pathToScript} ${scriptArg}`; 12 | runCmdSync(`${cmd}`); 13 | -------------------------------------------------------------------------------- /scripts/screens/boring-string-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_BoringStringIdTestEntity" 5 | }, 6 | "editComponentName": "BoringStringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_BoringStringIdTestEntity" 11 | }, 12 | "listComponentName": "BoringStringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_BoringStringIdTestEntity" 18 | }, 19 | "managementComponentName": "boring-string-id-management-table" 20 | } -------------------------------------------------------------------------------- /scripts/screens/composite-key-entity-management-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_CompositeKeyEntity" 5 | }, 6 | "editComponentName": "CompositeKeyEntityCardsEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_CompositeKeyEntity" 10 | }, 11 | "listComponentName": "CompositeKeyEntityCards", 12 | "listType": "cards", 13 | "entity": { 14 | "name": "scr_CompositeKeyEntity" 15 | }, 16 | "managementComponentName": "CompositeKeyEntityManagement3" 17 | } 18 | -------------------------------------------------------------------------------- /scripts/screens/composite-key-entity-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_CompositeKeyEntity" 5 | }, 6 | "editComponentName": "CompositeKeyEntityListEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_CompositeKeyEntity" 10 | }, 11 | "listComponentName": "CompositeKeyEntityList", 12 | "listType": "list", 13 | "entity": { 14 | "name": "scr_CompositeKeyEntity" 15 | }, 16 | "managementComponentName": "CompositeKeyEntityManagement2" 17 | } 18 | -------------------------------------------------------------------------------- /scripts/screens/composite-key-entity-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_CompositeKeyEntity" 5 | }, 6 | "editComponentName": "CompositeKeyEntityTableEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_CompositeKeyEntity" 10 | }, 11 | "listComponentName": "CompositeKeyEntityTable", 12 | "listType": "table", 13 | "entity": { 14 | "name": "scr_CompositeKeyEntity" 15 | }, 16 | "managementComponentName": "CompositeKeyEntityManagement1" 17 | } 18 | -------------------------------------------------------------------------------- /scripts/screens/hooks-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "datatypesTestEntity-view", 4 | "entityName": "scr_DatatypesTestEntity" 5 | }, 6 | "editComponentName": "HooksEMListEdit", 7 | "listView": { 8 | "name": "datatypesTestEntity-view", 9 | "entityName": "scr_DatatypesTestEntity" 10 | }, 11 | "listComponentName": "HooksEMListBrowse", 12 | "listType": "list", 13 | "entity": { 14 | "name": "scr_DatatypesTestEntity" 15 | }, 16 | "managementComponentName": "HooksEMListMgt", 17 | "nestedEntityInfo": { 18 | "compositionO2Oattr": "compositionO2OTestEntity-view", 19 | "compositionO2Mattr": "compositionO2MTestEntity-view" 20 | } 21 | } -------------------------------------------------------------------------------- /scripts/screens/int-id-management-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntegerIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdMgtCardsEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntegerIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdMgtCardsBrowse", 12 | "listType": "cards", 13 | "entity": { 14 | "name": "scr_IntegerIdTestEntity" 15 | }, 16 | "managementComponentName": "int-id-management-cards" 17 | } -------------------------------------------------------------------------------- /scripts/screens/int-id-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntegerIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdMgtListEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntegerIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdMgtListBrowse", 12 | "listType": "list", 13 | "entity": { 14 | "name": "scr_IntegerIdTestEntity" 15 | }, 16 | "managementComponentName": "int-id-management-list" 17 | } -------------------------------------------------------------------------------- /scripts/screens/int-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntegerIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdMgtTableEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntegerIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdMgtTableBrowse", 12 | "listType": "table", 13 | "entity": { 14 | "name": "scr_IntegerIdTestEntity" 15 | }, 16 | "managementComponentName": "int-id-management-table" 17 | } -------------------------------------------------------------------------------- /scripts/screens/int-identity-id-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "entity": { 3 | "name": "scr_IntIdentityIdTestEntity" 4 | }, 5 | "componentName": "IntIdentityIdCards", 6 | "entityView": { 7 | "name": "_local", 8 | "entityName": "scr_IntIdentityIdTestEntity" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /scripts/screens/int-identity-id-management-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntIdentityIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdentityIdMgtCardsEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntIdentityIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdentityIdMgtCardsBrowse", 12 | "listType": "cards", 13 | "entity": { 14 | "name": "scr_IntIdentityIdTestEntity" 15 | }, 16 | "managementComponentName": "int-identity-id-mgt-cards-management" 17 | } -------------------------------------------------------------------------------- /scripts/screens/int-identity-id-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntIdentityIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdentityIdMgtListEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntIdentityIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdentityIdMgtListBrowse", 12 | "listType": "list", 13 | "entity": { 14 | "name": "scr_IntIdentityIdTestEntity" 15 | }, 16 | "managementComponentName": "int-identity-id-mgt-list-management" 17 | } -------------------------------------------------------------------------------- /scripts/screens/int-identity-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_IntIdentityIdTestEntity" 5 | }, 6 | "editComponentName": "IntIdentityIdMgtTableEdit", 7 | "listView": { 8 | "name": "_local", 9 | "entityName": "scr_IntIdentityIdTestEntity" 10 | }, 11 | "listComponentName": "IntIdentityIdMgtTableBrowse", 12 | "listType": "table", 13 | "entity": { 14 | "name": "scr_IntIdentityIdTestEntity" 15 | }, 16 | "managementComponentName": "int-identity-id-mgt-table-management" 17 | } -------------------------------------------------------------------------------- /scripts/screens/string-id-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "entity": { 3 | "name": "scr_StringIdTestEntity" 4 | }, 5 | "componentName": "StringIdCards", 6 | "entityView": { 7 | "name": "_local", 8 | "entityName": "scr_StringIdTestEntity" 9 | }, 10 | "listShowIdAttr": true, 11 | "listIdAttrPos": 1 12 | } 13 | -------------------------------------------------------------------------------- /scripts/screens/string-id-management-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtCardsEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtCardsBrowse", 13 | "listType": "cards", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity" 18 | }, 19 | "managementComponentName": "string-id-mgt-cards-management" 20 | } -------------------------------------------------------------------------------- /scripts/screens/string-id-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtListEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtListBrowse", 13 | "listType": "list", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity" 18 | }, 19 | "managementComponentName": "string-id-mgt-list-management" 20 | } -------------------------------------------------------------------------------- /scripts/screens/string-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_StringIdTestEntity" 5 | }, 6 | "editComponentName": "StringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_StringIdTestEntity" 11 | }, 12 | "listComponentName": "StringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_StringIdTestEntity" 18 | }, 19 | "managementComponentName": "string-id-mgt-table-management" 20 | } -------------------------------------------------------------------------------- /scripts/screens/weird-string-id-management-cards.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_WeirdStringIdTestEntity" 5 | }, 6 | "editComponentName": "WeirdStringIdMgtCardsEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_WeirdStringIdTestEntity" 11 | }, 12 | "listComponentName": "WeirdStringIdMgtCardsBrowse", 13 | "listType": "cards", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_WeirdStringIdTestEntity" 18 | }, 19 | "managementComponentName": "weird-string-id-mgt-cards-management" 20 | } -------------------------------------------------------------------------------- /scripts/screens/weird-string-id-management-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_WeirdStringIdTestEntity" 5 | }, 6 | "editComponentName": "WeirdStringIdMgtListEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_WeirdStringIdTestEntity" 11 | }, 12 | "listComponentName": "WeirdStringIdMgtListBrowse", 13 | "listType": "list", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_WeirdStringIdTestEntity" 18 | }, 19 | "managementComponentName": "weird-string-id-mgt-list-management" 20 | } -------------------------------------------------------------------------------- /scripts/screens/weird-string-id-management-table.json: -------------------------------------------------------------------------------- 1 | { 2 | "editView": { 3 | "name": "_local", 4 | "entityName": "scr_WeirdStringIdTestEntity" 5 | }, 6 | "editComponentName": "WeirdStringIdMgtTableEdit", 7 | "editIdAttrPos": 1, 8 | "listView": { 9 | "name": "_local", 10 | "entityName": "scr_WeirdStringIdTestEntity" 11 | }, 12 | "listComponentName": "WeirdStringIdMgtTableBrowse", 13 | "listType": "table", 14 | "listShowIdAttr": true, 15 | "listIdAttrPos": 2, 16 | "entity": { 17 | "name": "scr_WeirdStringIdTestEntity" 18 | }, 19 | "managementComponentName": "weird-string-id-mgt-table-management" 20 | } -------------------------------------------------------------------------------- /scripts/update-given-client-libs.js: -------------------------------------------------------------------------------- 1 | const updateClientLibs = require('./update-client-libs'); 2 | 3 | const args = process.argv.slice(2); 4 | const clientDir = args[0]; 5 | const libs = args.slice(1); 6 | 7 | updateClientLibs(clientDir, libs, true); 8 | -------------------------------------------------------------------------------- /scripts/update-react-client-libs.js: -------------------------------------------------------------------------------- 1 | const updateClientLibs = require('./update-client-libs'); 2 | 3 | updateClientLibs( 4 | 'react-client-scr', 5 | ['rest', 'react-core', 'react-ui'] 6 | ); -------------------------------------------------------------------------------- /scripts/update-react-native-client-libs.js: -------------------------------------------------------------------------------- 1 | const updateClientLibs = require('./update-client-libs'); 2 | 3 | updateClientLibs( 4 | 'react-native-client-scr', 5 | ['rest', 'react-core'] 6 | ); -------------------------------------------------------------------------------- /test-pup/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | '@babel/plugin-proposal-class-properties' 4 | ] 5 | } -------------------------------------------------------------------------------- /test-pup/common/paging.js: -------------------------------------------------------------------------------- 1 | 2 | exports.checkPaging = (rowSelector) => async (page, url, [cardsCount, buttonTitles]) => { 3 | await page.goto(`http://localhost:3000/#/${url}`); 4 | await page.reload(); 5 | await page.waitFor(rowSelector); 6 | await page.waitFor('ul.ant-pagination li'); 7 | 8 | const carCards = await page.$$(rowSelector); 9 | if (cardsCount != null) expect(carCards.length).toEqual(cardsCount); 10 | 11 | const pagingButtonCaptions = await page 12 | .$$eval('ul.ant-pagination li', els => els.map(el => el.getAttribute('title'))); 13 | expect(pagingButtonCaptions).toEqual(buttonTitles); 14 | }; 15 | -------------------------------------------------------------------------------- /test-pup/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | verbose: true, 3 | preset: "jest-puppeteer", 4 | testTimeout: 10000 5 | }; 6 | -------------------------------------------------------------------------------- /test-pup/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-puppeteer", 3 | "private": true, 4 | "scripts": { 5 | "test": "jest" 6 | }, 7 | "devDependencies": { 8 | "@babel/plugin-proposal-class-properties": "^7.8.3", 9 | "@types/jest": "^25.1.3", 10 | "jest": "^24.9.0", 11 | "jest-puppeteer": "^4.3.0", 12 | "puppeteer": "^2.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test-pup/react-client-scr/data-table/data-table-custom-filter/data-table-no-filters.test.js: -------------------------------------------------------------------------------- 1 | const FilterActions = require('./FilterActions'); 2 | 3 | // TODO https://github.com/cuba-platform/frontend/issues/284 4 | xdescribe('DataTable - no filters', () => { 5 | let fa = new FilterActions(); 6 | beforeAll(fa.beforeAll); 7 | beforeEach(fa.beforeEach); 8 | afterAll(fa.afterAll); 9 | 10 | it('No filters applied', async () => { 11 | await fa.expectResults(0, ['0', '-8273729824.34', '9131354156.12', '']); 12 | }); 13 | 14 | }); -------------------------------------------------------------------------------- /travis/push-client-builds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | REPO_URL=https://${GH_TOKEN}@github.com/cuba-labs/frontend-scr-builds.git 4 | BRANCH=master 5 | 6 | echo "Cloning frontend-scr-builds" 7 | git clone $REPO_URL --branch=$BRANCH > /dev/null 2>&1 8 | cd frontend-scr-builds || exit 9 | git remote set-url origin $REPO_URL > /dev/null 2>&1 10 | 11 | echo "Copying the built clients" 12 | cp -r ../react-client-scr . 13 | cp -r ../react-native-client-scr . 14 | 15 | echo "Committing" 16 | git config user.name "Travis CI" 17 | git config user.email "<>" 18 | git add -A 19 | git commit -m "Build $TRAVIS_BUILD_NUMBER" 20 | 21 | echo "Pushing" 22 | git push --quiet --set-upstream origin $BRANCH --------------------------------------------------------------------------------