├── .gitattributes ├── .gitignore ├── .gitlab-ci.yml ├── .prettierignore ├── .prettierrc.json ├── README.md ├── app-overview.md ├── create-indexphp.js ├── index.html ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── public ├── .htaccess ├── deploy.php ├── favicon.ico ├── favicon.png ├── index.html ├── manifest.json ├── robots.txt └── watermark-loader.js ├── src ├── App.tsx ├── app │ ├── admin │ │ ├── approve-bookings │ │ │ ├── deleted │ │ │ │ └── page.ts │ │ │ └── page.ts │ │ ├── asset-management │ │ │ └── page.ts │ │ ├── booking-documents │ │ │ └── page.ts │ │ ├── booking-manager │ │ │ └── page.ts │ │ ├── closures │ │ │ └── page.ts │ │ ├── config-settings │ │ │ └── page.ts │ │ ├── datasets │ │ │ └── page.ts │ │ ├── email-templates │ │ │ └── page.ts │ │ ├── equipment │ │ │ └── page.ts │ │ ├── form-management │ │ │ ├── page.ts │ │ │ └── questions │ │ │ │ └── [form_id] │ │ │ │ └── page.ts │ │ ├── holidays │ │ │ └── page.ts │ │ ├── invoice-management │ │ │ └── page.ts │ │ ├── key-register │ │ │ └── page.ts │ │ ├── page-management │ │ │ └── page.ts │ │ ├── page.ts │ │ ├── permission-management │ │ │ └── page.ts │ │ ├── pricing-management │ │ │ └── page.ts │ │ ├── role-management │ │ │ └── page.ts │ │ ├── seasons │ │ │ └── page.ts │ │ ├── storage │ │ │ └── page.ts │ │ ├── tools │ │ │ └── page.ts │ │ ├── user-management │ │ │ └── page.ts │ │ └── workflows │ │ │ └── page.ts │ ├── ai │ │ └── page.ts │ ├── allocations │ │ └── page.ts │ ├── application │ │ ├── [application_id] │ │ │ ├── admin │ │ │ │ └── page.ts │ │ │ └── page.ts │ │ └── [form_id] │ │ │ └── [application_id] │ │ │ └── page.ts │ ├── asset │ │ └── [asset_id] │ │ │ ├── page.ts │ │ │ └── questions │ │ │ └── page.ts │ ├── bookings │ │ ├── [asset_id] │ │ │ └── page.ts │ │ ├── add │ │ │ ├── [id] │ │ │ │ └── page.ts │ │ │ └── page.ts │ │ ├── bond-refund │ │ │ └── page.ts │ │ ├── page.ts │ │ └── submitted │ │ │ └── page.ts │ ├── calendar │ │ └── page.ts │ ├── clashes │ │ └── page.ts │ ├── component │ │ └── page.ts │ ├── createSite │ │ └── page.ts │ ├── crm │ │ ├── activity-details │ │ │ └── page.ts │ │ ├── hirer-details │ │ │ ├── page.ts │ │ │ └── {hirer_id} │ │ │ │ ├── communication │ │ │ │ └── page.ts │ │ │ │ └── documents │ │ │ │ └── page.ts │ │ └── page.ts │ ├── dashboard │ │ └── page.ts │ ├── demo │ │ ├── event │ │ │ └── page.ts │ │ ├── paid │ │ │ └── page.ts │ │ ├── payment │ │ │ └── page.ts │ │ └── seat │ │ │ └── page.ts │ ├── history │ │ ├── [form_id] │ │ │ └── [item_id] │ │ │ │ └── page.ts │ │ └── page.ts │ ├── ims │ │ └── page.ts │ ├── inspection │ │ └── [form_id] │ │ │ └── [application_id] │ │ │ └── page.ts │ ├── inspections │ │ └── page.ts │ ├── lists │ │ ├── activity-types │ │ │ └── page.ts │ │ ├── asset-type │ │ │ └── page.ts │ │ ├── booking-category │ │ │ └── page.ts │ │ ├── chart-management │ │ │ └── page.ts │ │ ├── customer-type │ │ │ └── page.ts │ │ ├── feature-list │ │ │ └── page.ts │ │ ├── hirer-type │ │ │ └── page.ts │ │ ├── page.ts │ │ └── sports │ │ │ └── page.ts │ ├── login │ │ └── page.tsx │ ├── logout │ │ └── page.tsx │ ├── maintenance │ │ └── page.ts │ ├── my-dashboard │ │ └── page.ts │ ├── pages.tsx │ ├── pool │ │ ├── page.ts │ │ └── tests │ │ │ └── page.ts │ ├── postman │ │ └── page.ts │ ├── register │ │ └── page.tsx │ ├── reports │ │ └── page.ts │ ├── reset-password │ │ └── page.tsx │ ├── testing │ │ ├── checklist │ │ │ └── page.ts │ │ ├── defects-faults │ │ │ └── page.ts │ │ ├── form-process │ │ │ └── page.ts │ │ ├── page.ts │ │ ├── payments │ │ │ └── page.ts │ │ └── tasks │ │ │ └── page.ts │ └── venues │ │ └── page.ts ├── assets │ ├── bootstrap.css │ ├── calendar.css │ ├── images │ │ ├── confirmation.svg │ │ ├── contact.svg │ │ ├── invoice.svg │ │ ├── keyholders.svg │ │ ├── logo.png │ │ ├── outstanding.svg │ │ ├── report-letters.svg │ │ └── watermark.png │ ├── main.css │ └── scrollbar.css ├── components │ ├── DynamicComponent │ │ ├── AddNewComponent.tsx │ │ ├── ComponentSettings.tsx │ │ ├── ComponentTester.tsx │ │ ├── DC.tsx │ │ ├── DynamicComponent.tsx │ │ ├── DynamicComponentBuilder.tsx │ │ ├── JsonComponent.tsx │ │ ├── JsonComponentItem.tsx │ │ ├── JsonComponentSettings.tsx │ │ ├── formatFunction.ts │ │ └── textReplace.ts │ ├── DynamicPage │ │ ├── CreateDynamicItem.tsx │ │ ├── CreateDynamicPage.tsx │ │ ├── DynamicEditCreateButton.tsx │ │ ├── DynamicPage.tsx │ │ ├── PageEditButton │ │ │ └── PageEditButton.tsx │ │ └── index.ts │ ├── Form │ │ ├── AddMultipleUsage │ │ │ └── AddMultipleUsage.tsx │ │ ├── AssetEquipments │ │ │ ├── EquipmentInput.tsx │ │ │ └── EquipmentSwitch.tsx │ │ ├── AssetSelector │ │ │ └── AssetSelector.tsx │ │ ├── BookingAdminButtons │ │ │ └── BookingAdminButtons.tsx │ │ ├── BookingDates │ │ │ └── BookingDates.tsx │ │ ├── Button │ │ │ └── Button.tsx │ │ ├── ButtonGroup │ │ │ └── ButtonGroup.tsx │ │ ├── Camera │ │ │ └── Camera.tsx │ │ ├── Checkbox │ │ │ └── Checkbox.tsx │ │ ├── Checkboxes │ │ │ └── Checkboxes.tsx │ │ ├── Chip │ │ │ └── Chip.tsx │ │ ├── ClashCheck │ │ │ └── ClashCheck.tsx │ │ ├── ColorInput │ │ │ └── ColorInput.tsx │ │ ├── Compliance │ │ │ └── Compliance.tsx │ │ ├── ComponentSelector │ │ │ └── ComponentSelector.tsx │ │ ├── CostItems │ │ │ └── CostItems.tsx │ │ ├── CreditCard │ │ │ ├── CreditCard.tsx │ │ │ └── utils.ts │ │ ├── CustomSelector │ │ │ └── CustomSelector.tsx │ │ ├── DatasetSelector │ │ │ └── DatasetSelector.tsx │ │ ├── Date │ │ │ └── Date.tsx │ │ ├── DatePicker │ │ │ └── DatePicker.tsx │ │ ├── DateTime │ │ │ └── DateTime.tsx │ │ ├── File │ │ │ └── File.tsx │ │ ├── FileDoc │ │ │ └── FileDoc.tsx │ │ ├── FileUploader │ │ │ └── FileUploader.tsx │ │ ├── Form │ │ │ ├── Form.tsx │ │ │ ├── FormGroup.tsx │ │ │ ├── formHeading │ │ │ │ └── FormHeading.tsx │ │ │ └── formSettings.ts │ │ ├── FormButton │ │ │ └── FormButton.tsx │ │ ├── FormProps │ │ │ └── FormProps.tsx │ │ ├── FormReadOnly │ │ │ └── FormReadOnly.tsx │ │ ├── FormSection │ │ │ ├── FormSection.tsx │ │ │ └── menuItem.module.css │ │ ├── FormSelector │ │ │ └── FormSelector.tsx │ │ ├── HirerSelector │ │ │ └── HirerSelector.tsx │ │ ├── Input │ │ │ └── Input.tsx │ │ ├── InputAddress │ │ │ └── InputAddress.tsx │ │ ├── InputContact │ │ │ └── InputContact.tsx │ │ ├── InputGenderCount │ │ │ └── InputGenderCount.tsx │ │ ├── InputNumber │ │ │ └── InputNumber.tsx │ │ ├── InputPassword │ │ │ └── InputPassword.tsx │ │ ├── InputPrice │ │ │ └── InputPrice.tsx │ │ ├── InputState │ │ │ └── InputState.tsx │ │ ├── InputSuggestions │ │ │ └── InputSuggestions.tsx │ │ ├── Json │ │ │ └── Json.tsx │ │ ├── ModuleSelect │ │ │ └── ModuleSelect.tsx │ │ ├── MultiSelect │ │ │ └── MultiSelect.tsx │ │ ├── Password │ │ │ └── Password.tsx │ │ ├── Pricing │ │ │ ├── Pricing.tsx │ │ │ └── Pricing_orig.tsx │ │ ├── Question │ │ │ ├── Question.tsx │ │ │ ├── QuestionSimple.tsx │ │ │ └── question.module.css │ │ ├── QuestionCondition │ │ │ ├── QuestionCondition.tsx │ │ │ └── checkConditions.ts │ │ ├── QuestionSelector │ │ │ └── QuestionSelector.tsx │ │ ├── Radio │ │ │ └── Radio.tsx │ │ ├── RadioGroup │ │ │ └── RadioGroup.tsx │ │ ├── Radios │ │ │ └── Radios.tsx │ │ ├── RangeDate │ │ │ └── RangeDate.tsx │ │ ├── ReadOnly │ │ │ └── ReadOnly.tsx │ │ ├── ReadOnlyForm │ │ │ └── ReadOnlyForm.tsx │ │ ├── RepeatEvent │ │ │ ├── RepeatEvent.tsx │ │ │ ├── RepeatEventDates.tsx │ │ │ └── UsageDateErrors.tsx │ │ ├── ResponsibeSelector │ │ │ └── ResponsibleSelector.tsx │ │ ├── RichText │ │ │ └── RichText.tsx │ │ ├── Segmented │ │ │ └── Segmented.tsx │ │ ├── Select │ │ │ └── Select.tsx │ │ ├── Signature │ │ │ └── Signature.tsx │ │ ├── SubForm │ │ │ └── SubForm.tsx │ │ ├── Terms │ │ │ └── Terms.tsx │ │ ├── Textarea │ │ │ └── Textarea.tsx │ │ ├── Time │ │ │ └── Time.tsx │ │ ├── TimeRange │ │ │ └── TimeRange.tsx │ │ ├── Toggle │ │ │ └── Toggle.tsx │ │ ├── Upload │ │ │ └── Upload.tsx │ │ ├── UserSelector │ │ │ └── UserSelector.tsx │ │ ├── WeekTimes │ │ │ ├── WeekTimes.tsx │ │ │ └── WeekTimesAll.tsx │ │ └── YesNo │ │ │ └── YesNo.tsx │ ├── Function │ │ ├── Action │ │ │ └── Action.tsx │ │ ├── Actions │ │ │ └── Actions.tsx │ │ ├── Ai │ │ │ └── Ai.tsx │ │ ├── Calculate │ │ │ └── Calculate.tsx │ │ ├── Conditional │ │ │ └── Conditional.tsx │ │ ├── Confirm │ │ │ └── Confirm.tsx │ │ ├── ForEach │ │ │ └── ForEach.tsx │ │ ├── FormForEach │ │ │ └── FormForEach.tsx │ │ ├── FormPdf │ │ │ └── FormPdf.tsx │ │ ├── FormatDate │ │ │ └── FormatDate.tsx │ │ ├── FormatDateTime │ │ │ └── FormatDateTime.tsx │ │ ├── FormatTime │ │ │ └── FormatTime.tsx │ │ ├── Fragment │ │ │ └── Fragment.tsx │ │ ├── HasPermission │ │ │ └── HasPermission.tsx │ │ ├── MapData │ │ │ └── MapData.tsx │ │ ├── Postman │ │ │ └── Postman.tsx │ │ ├── Prompt │ │ │ └── Prompt.tsx │ │ ├── SendEmail │ │ │ └── SendEmail.tsx │ │ ├── SetTitle │ │ │ └── SetTitle.tsx │ │ ├── Total │ │ │ └── Total.tsx │ │ ├── Transition │ │ │ └── Transition.tsx │ │ └── Workflow │ │ │ └── useWorkflow.tsx │ ├── LoadComponent │ │ └── LoadComponent.tsx │ ├── PageBuilder │ │ ├── ComponentMenu.tsx │ │ ├── ComponentMenuItem.tsx │ │ ├── ComponentSideBar.tsx │ │ ├── ComponentSideBarItem.tsx │ │ ├── PageBuilder.tsx │ │ └── componentMenu.module.css │ ├── Payments │ │ ├── PayPal │ │ │ └── PayPal.tsx │ │ └── Payment │ │ │ └── Payment.tsx │ ├── Preset │ │ ├── AllocationApplication │ │ │ └── AllocationApplication.tsx │ │ ├── AmottoAuditPhotos │ │ │ └── AmottoAuditPhotos.tsx │ │ ├── AssetCard │ │ │ └── AssetCard.tsx │ │ ├── AssetLink │ │ │ ├── AssetLinkForm.tsx │ │ │ ├── AssetLinkHirer.tsx │ │ │ └── HirerLinkAsset.tsx │ │ ├── AssetList │ │ │ └── AssetList.tsx │ │ ├── AssetRepeating │ │ │ └── AssetRepeating.tsx │ │ ├── BookingDetails │ │ │ ├── BookingDetails.css │ │ │ └── BookingDetails.tsx │ │ ├── BookingFormApplication │ │ │ └── BookingFormApplication.tsx │ │ ├── BookingList │ │ │ ├── Accordion.tsx │ │ │ ├── BookingAssetListApplication.tsx │ │ │ ├── BookingAssetListItem.tsx │ │ │ ├── BookingAssetListUsage.tsx │ │ │ ├── BookingFilters.tsx │ │ │ ├── BookingList.module.css │ │ │ ├── BookingList.tsx │ │ │ ├── BookingLoadingSkeleton.tsx │ │ │ └── index.ts │ │ ├── BookingManager │ │ │ ├── BookingManager.tsx │ │ │ └── booking-manager.module.css │ │ ├── BookingReport │ │ │ └── BookingReport.tsx │ │ ├── CRM │ │ │ ├── ActivityDetails │ │ │ │ └── ActivityDetails.tsx │ │ │ ├── CRM.tsx │ │ │ ├── HirerDetails │ │ │ │ ├── HirerDetails.tsx │ │ │ │ └── HirerDetailsAdditional.tsx │ │ │ └── HirerDetailsDocuments │ │ │ │ └── HirerDetailsDocuments.tsx │ │ ├── Clashes │ │ │ ├── ClashItem.tsx │ │ │ ├── Clashes.tsx │ │ │ └── index.ts │ │ ├── ClientBookingItem │ │ │ └── ClientBookingItem.tsx │ │ ├── ClientDashboard │ │ │ ├── ClientDashboard.tsx │ │ │ └── clientDashboard.module.css │ │ ├── ConfigSettings │ │ │ └── ConfigSettings.tsx │ │ ├── CreateSite │ │ │ └── CreateSite.tsx │ │ ├── Dashboard │ │ │ ├── Dashboard.module.css │ │ │ └── Dashboard.tsx │ │ ├── Equipment │ │ │ └── Equipment.tsx │ │ ├── Fees │ │ │ ├── FeeItem.tsx │ │ │ └── Fees.tsx │ │ ├── Filter │ │ │ ├── Filter.css │ │ │ ├── Filter.tsx │ │ │ └── FilterOn.tsx │ │ ├── FormDetail │ │ │ └── FormDetail.tsx │ │ ├── FormQuestion │ │ │ └── FormQuestion.tsx │ │ ├── IconList │ │ │ └── IconList.tsx │ │ ├── Inspections │ │ │ ├── InspectionButtons.tsx │ │ │ ├── InspectionFilters.tsx │ │ │ ├── InspectionIssues.tsx │ │ │ ├── InspectionList.tsx │ │ │ ├── InspectionLoadingSkeleton.tsx │ │ │ ├── complianceRating.ts │ │ │ └── index.ts │ │ ├── JobListing │ │ │ └── JobListing.tsx │ │ ├── KeyRegister │ │ │ └── KeyRegister.tsx │ │ ├── Login │ │ │ └── Login.tsx │ │ ├── Logout │ │ │ └── Logout.tsx │ │ ├── Page404 │ │ │ └── Page404.tsx │ │ ├── Participation │ │ │ └── Participation.tsx │ │ ├── PoolTests │ │ │ └── PoolTests.tsx │ │ ├── QrScanner │ │ │ └── QrScanner.tsx │ │ ├── Register │ │ │ ├── Register.tsx │ │ │ └── register.css │ │ ├── ResetPassword │ │ │ └── ResetPassword.tsx │ │ ├── RoleLink │ │ │ ├── RoleLinkEmail.tsx │ │ │ └── RoleLinkPermission.tsx │ │ ├── Storage │ │ │ └── Storage.tsx │ │ ├── Support │ │ │ └── Support.tsx │ │ ├── UserLink │ │ │ ├── HirerLinkUser.tsx │ │ │ ├── UserLink.tsx │ │ │ ├── UserLinkEmail.tsx │ │ │ └── UserLinkPermission.tsx │ │ ├── UserSendPassword │ │ │ └── UserSendPassword.tsx │ │ ├── VenueDetails │ │ │ ├── VenueDetails.module.css │ │ │ └── VenueDetails.tsx │ │ └── WordBuilder │ │ │ ├── WordBuilder.tsx │ │ │ └── amottoHeaderImage.tsx │ └── UI │ │ ├── Accordion │ │ └── Accordion.tsx │ │ ├── ActionMenu │ │ └── ActionMenu.tsx │ │ ├── AddDefault │ │ └── AddDefault.tsx │ │ ├── AddNewBooking │ │ └── AddNewBooking.tsx │ │ ├── Address │ │ └── Address.tsx │ │ ├── Alert │ │ ├── Alert.test.tsx │ │ └── Alert.tsx │ │ ├── Allocations │ │ ├── Allocations.tsx │ │ ├── ApplicationApprove.tsx │ │ ├── ApplicationButtons.tsx │ │ ├── ApplicationComplete.tsx │ │ └── ApplicationStatus.tsx │ │ ├── Anchor │ │ └── Anchor.tsx │ │ ├── Avatar │ │ └── Avatar.tsx │ │ ├── BackButton │ │ └── BackButton.tsx │ │ ├── BackToTop │ │ └── BackToTop.tsx │ │ ├── Badge │ │ └── Badge.tsx │ │ ├── Bookings │ │ ├── BookingApprove.tsx │ │ ├── BookingButtons.tsx │ │ ├── BookingComplete.tsx │ │ ├── BookingDecline.tsx │ │ └── BookingListAdmin.tsx │ │ ├── Calendar │ │ ├── Calendar.tsx │ │ ├── CalendarFilters.tsx │ │ ├── CalendarSkeleton.tsx │ │ └── calendar.module.css │ │ ├── CalendarItem │ │ └── CalendarItem.tsx │ │ ├── Callout │ │ ├── Callout.tsx │ │ └── callout.module.css │ │ ├── Card │ │ └── Card.tsx │ │ ├── Carousel │ │ └── Carousel.tsx │ │ ├── ChangeLog │ │ └── ChangeLog.tsx │ │ ├── Chart │ │ └── Chart.tsx │ │ ├── Col │ │ ├── Col.tsx │ │ └── col.module.css │ │ ├── Container │ │ └── Container.tsx │ │ ├── CopyButton │ │ └── CopyButton.tsx │ │ ├── Csv │ │ └── Csv.tsx │ │ ├── DashboardCharts │ │ └── DashboardCharts.tsx │ │ ├── DataGrid │ │ ├── CardGrid.tsx │ │ ├── DataGrid.tsx │ │ ├── GridSorting.tsx │ │ ├── Pagination.tsx │ │ ├── SearchFilter.tsx │ │ └── runFilter.ts │ │ ├── DayAtGlance │ │ ├── DayAtGlance.tsx │ │ └── dayatglance.module.css │ │ ├── DeleteButton │ │ └── DeleteButton.tsx │ │ ├── Details │ │ └── Details.tsx │ │ ├── Divider │ │ └── Divider.tsx │ │ ├── Dropdown │ │ └── Dropdown.tsx │ │ ├── EmailPreview │ │ └── EmailPreview.tsx │ │ ├── Gauge │ │ ├── Gauge.test.tsx │ │ └── Gauge.tsx │ │ ├── Grid │ │ └── Grid.tsx │ │ ├── Group │ │ └── Group.tsx │ │ ├── Heading │ │ ├── Heading.test.tsx │ │ └── Heading.tsx │ │ ├── HelpIcon │ │ └── HelpIcon.tsx │ │ ├── Hidden │ │ └── Hidden.tsx │ │ ├── History │ │ └── History.tsx │ │ ├── Hours │ │ └── Hours.tsx │ │ ├── Icon │ │ └── Icon.tsx │ │ ├── Image │ │ └── Image.tsx │ │ ├── ImageOrFile │ │ └── ImageOrFile.tsx │ │ ├── Invoice │ │ └── Invoice.tsx │ │ ├── ItemStatus │ │ └── ItemStatus.tsx │ │ ├── Kbd │ │ └── Kbd.tsx │ │ ├── LazyLoadImg │ │ └── LazyLoadImg.tsx │ │ ├── Link │ │ └── Link.tsx │ │ ├── List │ │ └── List.tsx │ │ ├── ListItems │ │ └── ListItems.tsx │ │ ├── Loader │ │ ├── Loader.tsx │ │ └── loader.module.css │ │ ├── LoaderContent │ │ └── LoaderContent.tsx │ │ ├── LoaderModal │ │ └── LoaderModal.tsx │ │ ├── LoadingOverlay │ │ └── LoadingOverlay.tsx │ │ ├── Map │ │ └── Map.tsx │ │ ├── MapInteractive │ │ └── MapInteractive.tsx │ │ ├── Menu │ │ └── Menu.tsx │ │ ├── MenuItem │ │ ├── MenuGroup.tsx │ │ ├── MenuItem.tsx │ │ ├── MenuItemTop.tsx │ │ ├── MenuToggle.tsx │ │ └── menuItem.module.css │ │ ├── Modal │ │ └── Modal.tsx │ │ ├── ModalButton │ │ └── ModalButton.tsx │ │ ├── ModalButtonForm │ │ └── ModalButtonForm.tsx │ │ ├── ModalClose │ │ └── ModalClose.tsx │ │ ├── Nav │ │ ├── Nav.tsx │ │ ├── NavMenu.tsx │ │ ├── NavModalButton.tsx │ │ └── navMenu.module.css │ │ ├── NavLink │ │ └── NavLink.tsx │ │ ├── NavTab │ │ ├── NavTabs.css │ │ └── NavTabs.tsx │ │ ├── NewFormButton │ │ └── NewFormButton.tsx │ │ ├── PageTitle │ │ └── PageTitle.tsx │ │ ├── Pdf │ │ └── Pdf.tsx │ │ ├── PlainText │ │ └── PlainText.tsx │ │ ├── PricingGrid │ │ └── PricingGrid.tsx │ │ ├── Process │ │ └── Process.tsx │ │ ├── Progress │ │ └── Progress.tsx │ │ ├── RawHtml │ │ └── RawHtml.tsx │ │ ├── RepeatRow │ │ └── RepeatRow.tsx │ │ ├── Repeating │ │ └── Repeating.tsx │ │ ├── Row │ │ ├── Row.tsx │ │ └── row.module.css │ │ ├── Rows │ │ └── Rows.tsx │ │ ├── SimpleGrid │ │ └── SimpleGrid.tsx │ │ ├── SimpleList │ │ └── SimpleList.tsx │ │ ├── SiteSearch │ │ └── SiteSearch.tsx │ │ ├── Skeleton │ │ └── Skeleton.tsx │ │ ├── Sortable │ │ └── Sortable.tsx │ │ ├── Space │ │ └── Space.tsx │ │ ├── Spoiler │ │ └── Spoiler.tsx │ │ ├── Stack │ │ └── Stack.tsx │ │ ├── Statistics │ │ └── Statistics.tsx │ │ ├── StyleTabs │ │ └── StyleTabs.tsx │ │ ├── Summary │ │ └── Summary.tsx │ │ ├── Switch │ │ └── Switch.tsx │ │ ├── Tables │ │ ├── CommunityCenter.tsx │ │ ├── PriceListingTable.tsx │ │ └── table.css │ │ ├── Tabs │ │ ├── Tab.tsx │ │ └── Tabs.tsx │ │ ├── TestEmailButton │ │ └── TestEmailButton.tsx │ │ ├── Text │ │ └── Text.tsx │ │ ├── TitleComponents │ │ └── TitleComponents.tsx │ │ ├── Toggle2 │ │ └── Toggle2.tsx │ │ ├── Tooltip │ │ └── Tooltip.tsx │ │ ├── VenueClash │ │ └── VenueClash.tsx │ │ └── VenuePreview │ │ ├── VenuePreview.tsx │ │ └── venuePreview.module.css ├── context │ ├── AppContext.ts │ ├── AppContextProvider.tsx │ ├── AuthContext.tsx │ ├── AuthContextProvider.tsx │ ├── CalendarContext.ts │ ├── CardContext.tsx │ ├── DataGridContext.ts │ ├── FormContext.ts │ ├── ModalContext.tsx │ ├── PageContext.ts │ ├── PageContextProvider.tsx │ ├── ThemeProvider.tsx │ └── VenuePreviewContextProvider.tsx ├── hooks │ ├── useAPI.ts │ ├── useAssets.ts │ ├── useAuth.ts │ ├── useCalculate.ts │ ├── useCalendarEvents.tsx │ ├── useComponentQuery.ts │ ├── useDataGridQuery.ts │ ├── useDataset.ts │ ├── useEmail.ts │ ├── useForm.ts │ ├── useHasPermission.ts │ ├── useInput.tsx │ ├── useIsOwner.ts │ ├── useOptions.ts │ ├── usePage.tsx │ ├── usePageBuilder.tsx │ ├── usePricing.ts │ └── useRegistryQuery.ts ├── index.tsx ├── layout │ ├── AppLoading.tsx │ ├── DefaultLayout.tsx │ ├── ErrorBoundary │ │ └── ErrorBoundary.tsx │ ├── Footer │ │ ├── Footer.css │ │ └── Footer.tsx │ ├── ProtectedRoute.tsx │ └── SideNav │ │ ├── SideNav.tsx │ │ └── sideNav.module.css ├── react-app-env.d.ts ├── registry │ ├── ComponentRegistryProps.ts │ ├── componentGroupRegistry.ts │ ├── componentRegistry.ts │ ├── componentSettingsRegistry.ts │ ├── componentTemplateRegistry.ts │ ├── datasetRegistry.ts │ ├── emailRegistry.ts │ ├── emails │ │ ├── allocation_approval.ts │ │ ├── booking_approval.ts │ │ ├── booking_completion.ts │ │ ├── booking_declined.ts │ │ ├── inspection_completion.ts │ │ ├── open_reminder.ts │ │ ├── support.ts │ │ └── user.ts │ ├── formRegistry.ts │ ├── forms │ │ ├── activityType.ts │ │ ├── additionalDetails.ts │ │ ├── allocationForm.ts │ │ ├── application.ts │ │ ├── asset.ts │ │ ├── assetChecklist.ts │ │ ├── assetQuestion.ts │ │ ├── assetType.ts │ │ ├── bondRefund.ts │ │ ├── booking-document.ts │ │ ├── booking.ts │ │ ├── bookingCategory.ts │ │ ├── bookingList.ts │ │ ├── calendar.ts │ │ ├── casualForm.ts │ │ ├── casualUsage.ts │ │ ├── casualUsagePublic.ts │ │ ├── charts.ts │ │ ├── checklist.ts │ │ ├── clashUsage.ts │ │ ├── clientContact.ts │ │ ├── closure.ts │ │ ├── complianceDetails.ts │ │ ├── complianceDocs.ts │ │ ├── complianceIssue.ts │ │ ├── configForm.ts │ │ ├── customerType.ts │ │ ├── daily.ts │ │ ├── datasets.ts │ │ ├── defectsFaults.ts │ │ ├── emailTemplates.ts │ │ ├── equipment.ts │ │ ├── event.ts │ │ ├── features.ts │ │ ├── fee.ts │ │ ├── form.ts │ │ ├── hirer.ts │ │ ├── hirerDetails.ts │ │ ├── hirerEquipment.ts │ │ ├── hirerKey.ts │ │ ├── hirerStorage.ts │ │ ├── hirerType.ts │ │ ├── hirerUserForm.ts │ │ ├── holiday.ts │ │ ├── internalNotes.ts │ │ ├── invoice.ts │ │ ├── keyRegistry.ts │ │ ├── maintenance.ts │ │ ├── notes.ts │ │ ├── officeBearers.ts │ │ ├── page.ts │ │ ├── participation.ts │ │ ├── payment.ts │ │ ├── permission.ts │ │ ├── poolTest.ts │ │ ├── pricing.ts │ │ ├── question.ts │ │ ├── reserve.ts │ │ ├── role.ts │ │ ├── school.ts │ │ ├── schoolParticipation.ts │ │ ├── season.ts │ │ ├── sport.ts │ │ ├── storage.ts │ │ ├── support.ts │ │ ├── task.ts │ │ ├── taskNotes.ts │ │ ├── taskTimes.ts │ │ ├── team.ts │ │ ├── trainer.ts │ │ ├── trainingDetails.ts │ │ ├── usage.ts │ │ ├── user.ts │ │ ├── userDetails.ts │ │ ├── userVenue.ts │ │ ├── venueUsage.ts │ │ ├── weekly.ts │ │ ├── workflow.ts │ │ └── workflowStep.ts │ ├── iconRegistry.ts │ ├── icons │ │ ├── Accessibility.ts │ │ ├── Add.ts │ │ ├── ArrowRight.ts │ │ ├── Attachment.ts │ │ ├── Back.ts │ │ ├── Bandaid.ts │ │ ├── Bars.ts │ │ ├── Bolt.ts │ │ ├── Build.ts │ │ ├── Building.ts │ │ ├── Calendar.ts │ │ ├── Camera.ts │ │ ├── Cancel.ts │ │ ├── Cert.ts │ │ ├── Chart.ts │ │ ├── Checklist.ts │ │ ├── Clash.ts │ │ ├── Clock.ts │ │ ├── Close.ts │ │ ├── Comment.ts │ │ ├── Construction.ts │ │ ├── Copy.ts │ │ ├── Database.ts │ │ ├── Defect.ts │ │ ├── Delete.ts │ │ ├── Dollar.ts │ │ ├── Done.ts │ │ ├── Down.ts │ │ ├── Download.ts │ │ ├── Drag.ts │ │ ├── Drive.ts │ │ ├── Edit.ts │ │ ├── Ellipsis.ts │ │ ├── EllipsisVertical.ts │ │ ├── Email.ts │ │ ├── Equipment.ts │ │ ├── Event.ts │ │ ├── File.ts │ │ ├── Filter.ts │ │ ├── Flow.ts │ │ ├── Folder.ts │ │ ├── Forward.ts │ │ ├── Gauge.ts │ │ ├── Gears.ts │ │ ├── Home.ts │ │ ├── Image.ts │ │ ├── Images.ts │ │ ├── Info.ts │ │ ├── Invoice.ts │ │ ├── Key.ts │ │ ├── Left.ts │ │ ├── Link.ts │ │ ├── List.ts │ │ ├── Lock.ts │ │ ├── Logout.ts │ │ ├── Mail.ts │ │ ├── Map.ts │ │ ├── Medication.ts │ │ ├── Menu.ts │ │ ├── Mobile.ts │ │ ├── Move.ts │ │ ├── Notes.ts │ │ ├── Notifications.ts │ │ ├── Page.ts │ │ ├── Pdf.tsx │ │ ├── Phone.ts │ │ ├── Pie.ts │ │ ├── Plus.ts │ │ ├── Pool.ts │ │ ├── Power.ts │ │ ├── Question.ts │ │ ├── Redo.ts │ │ ├── Report.ts │ │ ├── Right.ts │ │ ├── Rowing.ts │ │ ├── Save.ts │ │ ├── Scales.ts │ │ ├── Search.ts │ │ ├── Security.ts │ │ ├── Send.ts │ │ ├── ShoppingCart.ts │ │ ├── Signature.ts │ │ ├── Stadium.ts │ │ ├── Sub.ts │ │ ├── Sun.ts │ │ ├── Support.ts │ │ ├── Sweep.ts │ │ ├── Table.ts │ │ ├── Tick.ts │ │ ├── Tool.ts │ │ ├── Trash.ts │ │ ├── Undo.ts │ │ ├── Up.ts │ │ ├── Upload.ts │ │ ├── User.ts │ │ ├── UserOutline.ts │ │ ├── Users.ts │ │ ├── Vaccines.ts │ │ ├── Video.ts │ │ ├── View.ts │ │ ├── Warehouse.ts │ │ └── Warning.ts │ ├── moduleRegistry.ts │ ├── modules │ │ ├── activity.ts │ │ ├── allocation.ts │ │ ├── booking.ts │ │ ├── calendar.ts │ │ ├── crm.ts │ │ ├── email.ts │ │ ├── hirer.ts │ │ ├── inspection.ts │ │ ├── lifeguard.ts │ │ ├── maintenance.ts │ │ ├── pool.ts │ │ ├── schedule.ts │ │ ├── storage.ts │ │ └── testing.ts │ ├── pageRegistry.ts │ ├── permissionRegistry.ts │ └── workflowRegistry.ts ├── setupTests.ts ├── utilities │ ├── dates.tsx │ ├── localStorage.ts │ ├── objects.tsx │ └── strings.tsx └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | # Enforce Unix newlines 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | .env 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: alpine:latest 2 | 3 | stages: 4 | - manual-deploy 5 | 6 | manual_deploy: 7 | stage: manual-deploy 8 | environment: 9 | name: staging 10 | script: 11 | - wget --tries=1 -q -O - 'https://apps.imscomply.com.au/ims-app/deploy.php?v=034cdc7d-3808-4bc3-8b6a-8cc24cea3604' 12 | rules: 13 | - when: manual 14 | allow_failure: true 15 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | build 3 | node_modules 4 | .htaccess -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "printWidth": 80, 6 | "tabWidth": 2, 7 | "prettier.jsxBracketSameLine": true, 8 | "prettier.jsxSingleQuote": true, 9 | "[css]": { 10 | "editor.defaultFormatter": "vscode.css-language-features" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /create-indexphp.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | const file = fs.readFileSync('./build/index.html', { 4 | encoding: 'utf8', 5 | flag: 'r', 6 | }) 7 | 8 | const prepend = `` 12 | 13 | const newFile = [ 14 | prepend, 15 | file.replace('href="./"', 'href="//"'), 16 | ].join('\n') 17 | 18 | fs.writeFileSync('./build/index.php', newFile) 19 | fs.unlink('./build/index.html', (err) => { 20 | if (err) throw err 21 | console.log('path/file.txt was deleted') 22 | }) 23 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | IMS App 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript 3 | 4 | 5 | RewriteEngine On 6 | RewriteCond %{REQUEST_FILENAME} !-f 7 | RewriteCond %{REQUEST_FILENAME} !-d 8 | RewriteCond %{REQUEST_FILENAME} !-l 9 | RewriteCond %{DOCUMENT_ROOT}/index.php -f 10 | RewriteRule . index.php [L] 11 | 12 | RewriteCond %{REQUEST_FILENAME} !-f 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-l 15 | RewriteRule . index.html [L] 16 | 17 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Samurai1206/ImsFrontend/027d8da275e9e37f2338b5f8084d9ff51742e3aa/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Samurai1206/ImsFrontend/027d8da275e9e37f2338b5f8084d9ff51742e3aa/public/favicon.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | IMS App 12 | 13 | 14 | 18 | 19 | 20 | 21 |
22 | 23 |
24 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "IMS App", 3 | "name": "IMS App", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "favicon.png", 12 | "sizes": "192x192 180x180 152x152 144x144 120x120 96x96 64x64 60x60 57x57 48x48 36x36 32x32 24x24 16x16", 13 | "type": "image/x-icon" 14 | } 15 | ], 16 | "start_url": ".", 17 | "display": "standalone", 18 | "theme_color": "#337ab7", 19 | "background_color": "#ffffff" 20 | } 21 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: / 4 | -------------------------------------------------------------------------------- /src/app/admin/asset-management/page.ts: -------------------------------------------------------------------------------- 1 | const page: object = { 2 | id: '5781469e-64a3-11ed-9022-0242ac120002', 3 | path: 'admin/asset-management', 4 | name: 'Venues', 5 | icon: 'building', 6 | components: [ 7 | { 8 | component: 'DataGrid', 9 | endpoint: 'venue-list', 10 | columns: [ 11 | { name: 'Asset', sub: [{ component: 'AssetCard' }], single: true }, 12 | ], 13 | titleSub: [ 14 | { 15 | component: 'ModalButtonForm', 16 | icon: 'plus', 17 | text: 'Add new', 18 | formId: 'asset', 19 | size: 'xl', 20 | sentValues: { 21 | previewMode: true 22 | } 23 | }, 24 | ], 25 | }, 26 | ], 27 | parent_id: 'e5b09470-275c-4149-84d1-49d61b8c3493', 28 | show: 2, 29 | order: 0, 30 | category: 'admin', 31 | permission: 'admin', 32 | } 33 | 34 | export default page 35 | -------------------------------------------------------------------------------- /src/app/admin/booking-manager/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'f9799e3c-64a4-11ed-9022-0242ac120002', 3 | parent_id: '', 4 | ims: true, 5 | // parent_id: '056cc895-63ec-11ed-9fe0-54cd06b88880', 6 | path: 'admin/booking-manager', 7 | name: 'Booking Manager', 8 | module: 'booking', 9 | icon: 'calendar', 10 | permission: 'admin', 11 | components: [ 12 | { 13 | component: 'BookingManager', 14 | }, 15 | ], 16 | show: 0, 17 | category: 'booking', 18 | order: 7, 19 | } 20 | 21 | export default page 22 | -------------------------------------------------------------------------------- /src/app/admin/config-settings/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'e67a9f2f-00bb-4b8d-b817-7e11d5cea648', 3 | path: 'admin/config-settings', 4 | name: 'Config settings', 5 | ims: true, 6 | icon: 'gears', 7 | components: [ 8 | { 9 | component: 'ConfigSettings', 10 | }, 11 | ], 12 | parent_id: '7fae34b7-a723-4d2a-bff0-4fd8a53d497a', 13 | show: 2, 14 | } 15 | 16 | export default page 17 | -------------------------------------------------------------------------------- /src/app/admin/form-management/questions/[form_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'a4a4d5f6-64a5-11ed-9022-0242ac120002', 3 | parent_id: '056cc895-63ec-11ed-9fe0-54cd06b88880', 4 | path: 'admin/form-management/questions/:form_id', 5 | name: 'Question management', 6 | components: [ 7 | { 8 | component: 'FormQuestion', 9 | }, 10 | ], 11 | permission: 'dashboard', 12 | category: 'admin', 13 | } 14 | 15 | export default page 16 | -------------------------------------------------------------------------------- /src/app/admin/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '056cc895-63ec-11ed-9fe0-54cd06b88880', 3 | path: 'admin', 4 | name: 'Admin', 5 | icon: 'gears', 6 | category: 'admin', 7 | permission: 'admin', 8 | show: 2, 9 | order: 12, 10 | } 11 | 12 | export default page 13 | -------------------------------------------------------------------------------- /src/app/admin/tools/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '475e19a1-58cc-4275-9086-1e5d2312f56e', 3 | path: 'admin/tools', 4 | name: 'Tools', 5 | components: [ 6 | { 7 | component: 'SimpleGrid', 8 | sub: [ 9 | { 10 | component: 'Button', 11 | text: 'Icon list', 12 | link: '/component/IconList', 13 | }, 14 | { 15 | component: 'Button', 16 | text: 'Postman', 17 | link: '/postman', 18 | }, 19 | { 20 | component: 'Button', 21 | text: 'AI', 22 | link: '/ai', 23 | }, 24 | { 25 | component: 'Button', 26 | text: 'Data mapping', 27 | link: '/component/MapData', 28 | }, 29 | ], 30 | }, 31 | ], 32 | permission: 'admin', 33 | show: 0, 34 | } 35 | 36 | export default page 37 | -------------------------------------------------------------------------------- /src/app/admin/workflows/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '31708c06-64a5-11ed-9022-0242ac120002', 3 | parent_id: '7fae34b7-a723-4d2a-bff0-4fd8a53d497a', 4 | path: 'admin/workflow', 5 | name: 'Workflows', 6 | ims: true, 7 | icon: 'flow', 8 | components: [ 9 | { 10 | component: 'DataGrid', 11 | endpoint: 'd/workflow', 12 | form: 'workflow', 13 | columns: [ 14 | { 15 | name: 'Name', 16 | key: 'name', 17 | }, 18 | ], 19 | }, 20 | ], 21 | permission: 'dashboard', 22 | show: 2, 23 | category: 'admin', 24 | order: 20, 25 | } 26 | 27 | export default page 28 | -------------------------------------------------------------------------------- /src/app/ai/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '84790c37-8eb9-4f13-88ca-7a103e33cc15', 3 | path: 'ai', 4 | name: 'AI', 5 | components: [ 6 | { 7 | component: 'Ai', 8 | }, 9 | ], 10 | permission: 'admin', 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/allocations/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'c4fd6a9a-64a3-11ed-9022-0242ac120002', 3 | path: 'allocations', 4 | name: 'Allocations', 5 | hideTitle: true, 6 | icon: 'clock', 7 | components: [{ component: 'Allocations' }], 8 | show: 2, 9 | order: 6, 10 | category: 'booking', 11 | module: 'allocation', 12 | permission: 'dashboard', 13 | } 14 | 15 | export default page 16 | -------------------------------------------------------------------------------- /src/app/application/[application_id]/admin/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '81b778bd-72b1-4b1d-95c8-9938aa30c318', 3 | parent_id: '0', 4 | path: 'application/:id/admin', 5 | name: 'Application', 6 | components: [ 7 | { component: 'BackButton' }, 8 | { component: 'Space', props: { h: 'sm' } }, 9 | { component: 'BookingFormApplication', props: { isApproving: 'true' } }, 10 | { component: 'Space', props: { h: 'md' } }, 11 | ], 12 | permission: 'admin', 13 | category: 'admin', 14 | } 15 | 16 | export default page 17 | -------------------------------------------------------------------------------- /src/app/application/[application_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '8a7b6e3f-8aa3-4496-a1a0-0bc200dd494e', 3 | parent_id: '0', 4 | path: 'application/:id', 5 | name: 'Application', 6 | hidetitle: true, 7 | components: [ 8 | { component: 'SetTitle' }, 9 | { component: 'BackButton' }, 10 | { component: 'Space', props: { h: 'sm' } }, 11 | { component: 'BookingFormApplication' }, 12 | { component: 'Space', props: { h: 'md' } }, 13 | ], 14 | permission: 'application', 15 | category: 'admin', 16 | } 17 | 18 | export default page 19 | -------------------------------------------------------------------------------- /src/app/application/[form_id]/[application_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'a4a4cbce-64a5-11ed-9022-0242ac120002', 3 | parent_id: '0', 4 | path: 'application/:form_id/:id', 5 | name: 'Application', 6 | components: [ 7 | { component: 'SetTitle', props: { form_id: '{params.form_id}' } }, 8 | { component: 'BackButton' }, 9 | { component: 'Space', props: { h: 'sm' } }, 10 | { component: 'Form', props: { autosave: true, hideSave: true } }, 11 | { component: 'Space', props: { h: 'md' } }, 12 | { 13 | component: 'BackButton', 14 | props: { text: 'Save and exit', variant: 'success', icon: 'save' }, 15 | }, 16 | ], 17 | permission: 'application', 18 | category: 'admin', 19 | } 20 | 21 | export default page 22 | -------------------------------------------------------------------------------- /src/app/bookings/[asset_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'e55418a6-0f2c-476d-a4dd-554fee3cbd2b', 3 | path: 'bookings/:asset_id', 4 | name: 'Venue Details', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'VenueDetails', 10 | }, 11 | ], 12 | show: 0, 13 | order: 3, 14 | public: 1, 15 | //hideSideBar: true, 16 | hideTitle: true, 17 | } 18 | 19 | export default page 20 | -------------------------------------------------------------------------------- /src/app/bookings/add/[id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '35b8b6ee-0673-4439-9d8d-f8c5e5d41033', 3 | path: 'bookings/add/:param_id', 4 | name: 'Add new booking', 5 | icon: 'calendar', 6 | components: [ 7 | { 8 | component: 'Group', 9 | position: 'apart', 10 | sub: [ 11 | { 12 | component: 'BackButton', 13 | }, 14 | ], 15 | }, 16 | { 17 | component: 'Space', 18 | h: 'sm', 19 | }, 20 | { 21 | component: 'Form', 22 | formId: 'new-booking-list', 23 | readOnly: true, 24 | }, 25 | ], 26 | show: 0, 27 | order: 6, 28 | } 29 | 30 | export default page 31 | -------------------------------------------------------------------------------- /src/app/bookings/add/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'cf29e4b5-46aa-4811-b251-2d450a7603d6', 3 | path: 'bookings/add', 4 | name: 'Add new', 5 | icon: 'calendar', 6 | components: [ 7 | { 8 | component: 'Group', 9 | position: 'apart', 10 | sub: [ 11 | { 12 | component: 'BackButton', 13 | }, 14 | ], 15 | }, 16 | { 17 | component: 'Space', 18 | h: 'sm', 19 | }, 20 | { 21 | component: 'Form', 22 | formId: 'new-booking-list', 23 | readOnly: true, 24 | }, 25 | ], 26 | show: 0, 27 | order: 6, 28 | } 29 | 30 | export default page 31 | -------------------------------------------------------------------------------- /src/app/bookings/bond-refund/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '673dbcaa-5df7-43fc-bb99-cd7f84853628', 3 | parent_id: '056cc895-63ec-11ed-9fe0-54cd06b88880', 4 | name: 'Bond refund', 5 | path: 'bookings/bond-refund', 6 | permission: 'dashboard', 7 | module: 'booking', 8 | category: 'booking', 9 | icon: 'dollar', 10 | show: 2, 11 | order: 50, 12 | components: [ 13 | { 14 | component: 'StandardListingPageSingle', 15 | props: { endpoint: 'd/bond-refund', form: 'bond-refund' }, 16 | }, 17 | ], 18 | } 19 | 20 | export default page 21 | -------------------------------------------------------------------------------- /src/app/bookings/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '4ebe7b3e-6793-46d3-a496-035f1920395d', 3 | path: 'bookings', 4 | name: 'Bookings', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'BookingList', 10 | sub: [ 11 | { 12 | component: 'ModalButton', 13 | text: 'Check availability and book', 14 | size: 'lg', 15 | sub: [ 16 | { 17 | component: 'Form', 18 | props: { 19 | formId: 'casual', 20 | itemId: '{id}', 21 | }, 22 | }, 23 | ], 24 | }, 25 | ], 26 | }, 27 | ], 28 | //show: 0, 29 | order: 3, 30 | public: 1, 31 | //hideSideBar: true, 32 | } 33 | 34 | export default page 35 | -------------------------------------------------------------------------------- /src/app/bookings/submitted/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '21b34f35-a3c9-441a-aa9f-a43d35c1fdfe', 3 | path: 'bookings/submitted', 4 | name: 'Submitted request!', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'Alert', 10 | icon: 'Info', 11 | color: 'green', 12 | text: 'Your booking request has been submitted!', 13 | sub: [ 14 | 'You will receive an email with a copy of the confirmation details.', 15 | ], 16 | }, 17 | { 18 | component: 'Space', 19 | h: 'xl', 20 | }, 21 | { 22 | component: 'Button', 23 | icon: 'Back', 24 | text: 'Go back to listing page', 25 | link: '/bookings', 26 | }, 27 | ], 28 | show: 0, 29 | order: 3, 30 | public: 1, 31 | hideSideBar: true, 32 | } 33 | 34 | export default page 35 | -------------------------------------------------------------------------------- /src/app/calendar/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '709baa3c-64a5-11ed-9022-0242ac120002', 3 | parent_id: '0', 4 | path: 'calendar', 5 | name: 'Calendar', 6 | icon: 'calendar', 7 | module: 'calendar', 8 | hideTitle: true, 9 | components: [ 10 | { 11 | component: 'Calendar', 12 | props: { 13 | defaultFormat: { 14 | component: 'ModalButton', 15 | text: '{start_time} {title}', 16 | icon: 'clock', 17 | variant: 'success', 18 | sub: [ 19 | { 20 | component: 'Form', 21 | formId: 'calendar', 22 | itemId: '{id}', 23 | }, 24 | ], 25 | }, 26 | }, 27 | }, 28 | ], 29 | permission: 'calendar', 30 | show: 2, 31 | category: 'admin', 32 | } 33 | 34 | export default page 35 | -------------------------------------------------------------------------------- /src/app/clashes/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '42e753eb-f67a-474e-97dd-df15e99bb444', 3 | path: 'clashes', 4 | name: 'Clashes', 5 | icon: 'Clash', 6 | components: [ 7 | { 8 | component: 'Group', 9 | sub: [ 10 | { 11 | component: 'BackButton', 12 | }, 13 | ], 14 | }, 15 | { 16 | component: 'Clashes', 17 | }, 18 | ], 19 | show: 0, 20 | order: 6, 21 | category: 'booking', 22 | module: 'allocation', 23 | permission: 'dashboard', 24 | } 25 | 26 | export default page 27 | -------------------------------------------------------------------------------- /src/app/component/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'a48b66a9-96d3-4eb2-a9b9-94cce89eaa0f', 3 | path: 'component/:component', 4 | name: 'Component', 5 | components: [ 6 | { 7 | component: 'SetTitle', 8 | text: '{params.component || component}', 9 | }, 10 | { 11 | component: 'ComponentTester', 12 | }, 13 | ], 14 | permission: 'admin', 15 | } 16 | 17 | export default page 18 | -------------------------------------------------------------------------------- /src/app/createSite/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '8d99ef74-9c07-4790-a5aa-4dec6b155d9d', 3 | path: 'createSite', 4 | name: 'Create site', 5 | permission: 'admin', 6 | components: [ 7 | { 8 | component: 'CreateSite', 9 | }, 10 | ], 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/crm/activity-details/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'c12b14-64a3-11ed-9022-0242ac1200022', 3 | parent_id: '4ec12b14-64a3-11ed-9022-0242ac120002', 4 | path: 'crm/activity-details', 5 | name: 'Activity Details', 6 | icon: 'users', 7 | components: [ 8 | { 9 | component: 'ActivityDetails', 10 | }, 11 | ], 12 | // show: 2, 13 | order: 1, 14 | category: 'crm', 15 | module: 'crm', 16 | permission: 'dashboard', 17 | } 18 | 19 | export default page 20 | -------------------------------------------------------------------------------- /src/app/crm/hirer-details/{hirer_id}/documents/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'c12b14-64a3-11ed-9022-0242ac1200022', 3 | parent_id: '4ec12b14-64a3-11ed-9022-0242ac120002', 4 | path: 'crm/hirer-details/:hirer_id/documents', 5 | name: 'Hirer Details - Documents', 6 | icon: 'file', 7 | components: [ 8 | { 9 | component: 'HirerDetailsDocuments', 10 | }, 11 | ], 12 | // show: 2, 13 | order: 2, 14 | category: 'crm', 15 | module: 'crm', 16 | permission: 'dashboard', 17 | } 18 | 19 | export default page 20 | -------------------------------------------------------------------------------- /src/app/dashboard/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'd2f686de-63e9-11ed-9fe0-54cd06b88880', 3 | path: 'dashboard', 4 | name: 'Dashboard', 5 | icon: 'Home', 6 | show: 2, 7 | order: -1, 8 | permission: 'dashboard', 9 | hideTitle: true, 10 | components: [ 11 | { 12 | component: 'Dashboard', 13 | }, 14 | ], 15 | } 16 | 17 | export default page 18 | -------------------------------------------------------------------------------- /src/app/demo/event/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '69afa3da-4211-4c25-8f1f-d37e5372cd20', 3 | path: 'demo/event', 4 | name: 'Add new event', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'Stack', 10 | sub: [ 11 | { 12 | component: 'Form', 13 | formId: 'event', 14 | }, 15 | ], 16 | }, 17 | ], 18 | show: 0, 19 | order: 3, 20 | public: 1, 21 | } 22 | 23 | export default page 24 | -------------------------------------------------------------------------------- /src/app/demo/paid/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'eba0efb3-3034-44e1-aec6-363184febe8a', 3 | path: 'demo/paid', 4 | name: 'Invoice paid', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'Alert', 10 | icon: 'Info', 11 | color: 'green', 12 | text: 'The invoice #3 has been paid!', 13 | sub: ['You will receive an email with a copy of the payment details.'], 14 | }, 15 | { 16 | component: 'Space', 17 | h: 'xl', 18 | }, 19 | { 20 | component: 'Button', 21 | icon: 'Back', 22 | text: 'Go back to dashboard', 23 | link: '/dashboard', 24 | }, 25 | ], 26 | show: 0, 27 | order: 3, 28 | public: 1, 29 | hideSideBar: true, 30 | } 31 | 32 | export default page 33 | -------------------------------------------------------------------------------- /src/app/demo/payment/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '1955180c-fbac-45d2-91aa-dfd459767ec7', 3 | path: 'demo/payment', 4 | name: 'Payment', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | // { 9 | // component: 'Alert', 10 | // text: 'Payment', 11 | // }, 12 | { 13 | component: 'Stack', 14 | sub: [ 15 | { 16 | component: 'Invoice', 17 | formId: 'invoice', 18 | itemId: '8b2f2c68-af04-4db1-86e4-bab1f2399bf8', 19 | readOnly: true, 20 | }, 21 | { 22 | component: 'PayPal', 23 | price: '135', 24 | }, 25 | ], 26 | }, 27 | ], 28 | show: 0, 29 | order: 3, 30 | public: 1, 31 | hideSideBar: true, 32 | } 33 | 34 | export default page 35 | -------------------------------------------------------------------------------- /src/app/demo/seat/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '9ddd6180-271d-49e8-8cfe-ad1c17a94d59', 3 | path: 'demo/seat', 4 | name: 'Select a seat', 5 | icon: 'event', 6 | module: 'booking', 7 | components: [ 8 | { 9 | component: 'Stack', 10 | sub: [ 11 | { 12 | component: 'Image', 13 | src: 'http://local-ims-apps.com.au/seats.svg', 14 | }, 15 | ], 16 | }, 17 | ], 18 | show: 0, 19 | order: 3, 20 | public: 1, 21 | } 22 | 23 | export default page 24 | -------------------------------------------------------------------------------- /src/app/history/[form_id]/[item_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '5d830028-04b8-4bfd-8144-50e55483f057', 3 | path: 'history/:history_form_id/:history_id', 4 | name: 'History', 5 | icon: 'clock', 6 | show: 0, 7 | order: 0, 8 | permission: 'dashboard', 9 | components: [ 10 | { 11 | component: 'History', 12 | }, 13 | ], 14 | } 15 | 16 | export default page 17 | -------------------------------------------------------------------------------- /src/app/history/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '72dda611-5fa9-4e92-8d0a-4d17416a39a1', 3 | path: 'history', 4 | name: 'History', 5 | icon: 'clock', 6 | show: 2, 7 | order: 20, 8 | permission: 'dashboard', 9 | module: 'testing', 10 | components: [ 11 | { 12 | component: 'History', 13 | }, 14 | ], 15 | } 16 | 17 | export default page 18 | -------------------------------------------------------------------------------- /src/app/ims/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '7fae34b7-a723-4d2a-bff0-4fd8a53d497a', 3 | path: 'ims', 4 | name: 'IMS (only)', 5 | ims: true, 6 | icon: 'Equipment', 7 | category: 'ims', 8 | permission: 'admin', 9 | show: 2, 10 | order: 11, 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/inspection/[form_id]/[application_id]/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'b858b52c-52ad-4640-82c6-f7d18e9edced', 3 | parent_id: '0', 4 | path: 'inspection/:form_id/:id', 5 | name: 'Inspection', 6 | components: [ 7 | { 8 | component: 'Form', 9 | props: { autosave: true, hideSave: true, isInspection: true }, 10 | }, 11 | ], 12 | permission: 'application', 13 | category: 'admin', 14 | } 15 | 16 | export default page 17 | -------------------------------------------------------------------------------- /src/app/inspections/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '45553444-64a3-11ed-9022-0242ac120002', 3 | path: 'inspections', 4 | name: 'Inspections', 5 | hideTitle: true, 6 | 7 | icon: 'checklist', 8 | components: [ 9 | { 10 | component: 'InspectionList', 11 | }, 12 | ], 13 | show: 2, 14 | order: 7, 15 | category: 'inspection', 16 | module: 'inspection', 17 | permission: 'dashboard', 18 | } 19 | 20 | export default page 21 | -------------------------------------------------------------------------------- /src/app/lists/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '7c37508b-0502-4c32-b502-73c4fe70cb5a', 3 | path: 'lists', 4 | name: 'Lists', 5 | icon: 'gears', 6 | category: 'admin', 7 | permission: 'admin', 8 | show: 2, 9 | order: 14, 10 | } 11 | 12 | export default page 13 | -------------------------------------------------------------------------------- /src/app/login/page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Login = React.lazy(() => import('../../components/Preset/Login/Login')) 4 | 5 | const page = { 6 | id: 'd234bf8c-0c8c-499a-9f89-a24b5d6bc6d7', 7 | path: 'login', 8 | name: 'Login', 9 | element: , 10 | onlyContent: true, 11 | public: true, 12 | } 13 | 14 | export default page 15 | -------------------------------------------------------------------------------- /src/app/logout/page.tsx: -------------------------------------------------------------------------------- 1 | import { lazy } from 'react' 2 | 3 | const Logout = lazy(() => import('../../components/Preset/Logout/Logout')) 4 | 5 | const page = { 6 | id: 'e333a67f-d0de-410d-bb16-64a3a4e0d47d', 7 | path: 'logout', 8 | name: 'Logout', 9 | element: , 10 | public: true, 11 | onlyContent: true, 12 | } 13 | 14 | export default page 15 | -------------------------------------------------------------------------------- /src/app/my-dashboard/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '11f870c4-64a4-11ed-9022-0242ac120002', 3 | path: 'my-dashboard', 4 | name: 'My dashboard', 5 | icon: 'gauge', 6 | components: [{ component: 'ClientDashboard' }], 7 | show: 2, 8 | order: -2, 9 | category: 'client', 10 | permission: 'client-dashboard', 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/pages.tsx: -------------------------------------------------------------------------------- 1 | import Page404 from '../components/Preset/Page404/Page404' 2 | 3 | const page = { 4 | id: '8c8f5244-0592-4f67-bafa-a58d430fc68a', 5 | path: '*', 6 | name: '404', 7 | element: , 8 | } 9 | 10 | export default page 11 | -------------------------------------------------------------------------------- /src/app/pool/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '21f1af2c-64a4-11ed-9022-0242ac120002', 3 | path: 'pool', 4 | name: 'Pool module', 5 | icon: 'pool', 6 | show: 2, 7 | order: 12, 8 | category: 'pool', 9 | module: 'pool', 10 | permission: 'dashboard', 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/pool/tests/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '5d67788e-64a4-11ed-9022-0242ac120002', 3 | parent_id: '21f1af2c-64a4-11ed-9022-0242ac120002', 4 | path: 'pool-tests', 5 | name: 'Pool tests', 6 | icon: 'pool', 7 | components: [{ component: 'PoolTests' }], 8 | show: 2, 9 | order: 10, 10 | category: 'pool', 11 | module: 'pool', 12 | permission: 'dashboard', 13 | } 14 | 15 | export default page 16 | -------------------------------------------------------------------------------- /src/app/postman/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '82a1653e-458f-4c2f-832b-43315c8ed68c', 3 | path: 'postman', 4 | name: 'Postman', 5 | components: [ 6 | { 7 | component: 'Postman', 8 | }, 9 | ], 10 | permission: 'admin', 11 | } 12 | 13 | export default page 14 | -------------------------------------------------------------------------------- /src/app/register/page.tsx: -------------------------------------------------------------------------------- 1 | import Register from '../../components/Preset/Register/Register' 2 | 3 | const page = { 4 | id: 'f134c71c-addb-48f8-b605-c9d0b7f442a0', 5 | path: 'register', 6 | name: 'Register', 7 | element: , 8 | public: true, 9 | onlyContent: true, 10 | } 11 | 12 | export default page 13 | -------------------------------------------------------------------------------- /src/app/reports/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'f979b048-64a4-11ed-9022-0242ac120002', 3 | parent_id: '0', 4 | path: 'reports', 5 | name: 'Reports', 6 | icon: 'chart', 7 | components: [{ component: 'BookingReport' }], 8 | permission: 'dashboard', 9 | show: 0, 10 | category: 'reports', 11 | order: 12, 12 | } 13 | 14 | export default page 15 | -------------------------------------------------------------------------------- /src/app/reset-password/page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const ResetPassword = React.lazy( 4 | () => import('../../components/Preset/ResetPassword/ResetPassword'), 5 | ) 6 | 7 | const page = { 8 | id: 'd234bf8c-0c8c-499a-9f89-a24b5d6bc6d7', 9 | path: 'reset-password', 10 | name: 'Reset password', 11 | element: , 12 | onlyContent: true, 13 | public: true, 14 | } 15 | 16 | export default page 17 | -------------------------------------------------------------------------------- /src/app/testing/form-process/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '709ba456-64a5-11ed-9022-0242ac120002', 3 | parent_id: 'f979b5d4-64a4-11ed-9022-0242ac120002', 4 | path: 'form-process', 5 | name: 'Form process', 6 | icon: 'tick', 7 | components: [ 8 | { 9 | component: 'Form', 10 | formId: 'fb6f18d4-a855-424c-b9be-f21c7c5d7bff', 11 | }, 12 | ], 13 | permission: 'dashboard', 14 | show: 2, 15 | category: 'admin', 16 | } 17 | 18 | export default page 19 | -------------------------------------------------------------------------------- /src/app/testing/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'f979b5d4-64a4-11ed-9022-0242ac120002', 3 | path: 'testing', 4 | name: 'Testing', 5 | icon: 'col:orange', 6 | permission: 'dashboard', 7 | // module: 'testing', 8 | // show: 2, 9 | category: 'admin', 10 | order: 30, 11 | components: [ 12 | { 13 | component: 'TestEmailButton', 14 | }, 15 | ], 16 | } 17 | 18 | export default page 19 | -------------------------------------------------------------------------------- /src/app/testing/payments/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: '709ba74e-64a5-11ed-9022-0242ac120002', 3 | parent_id: 'f979b5d4-64a4-11ed-9022-0242ac120002', 4 | path: 'payment-form', 5 | name: 'Payment form', 6 | icon: 'dollar', 7 | components: [ 8 | { 9 | component: 'Form', 10 | formId: 'payment', 11 | itemId: '5516', 12 | autosave: 'false', 13 | }, 14 | ], 15 | permission: 'dashboard', 16 | show: 2, 17 | category: 'admin', 18 | } 19 | 20 | export default page 21 | -------------------------------------------------------------------------------- /src/app/venues/page.ts: -------------------------------------------------------------------------------- 1 | const page = { 2 | id: 'e5b09470-275c-4149-84d1-49d61b8c3493', 3 | path: 'admin/asset-management', 4 | name: 'Venues', 5 | icon: 'Building', 6 | category: 'admin', 7 | permission: 'admin', 8 | show: 2, 9 | order: 13, 10 | } 11 | 12 | export default page 13 | -------------------------------------------------------------------------------- /src/assets/calendar.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --fc-border-color: #e4e9fa; 3 | } 4 | .fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky > * { 5 | z-index: 60; 6 | } 7 | .fc { 8 | background-color: var(--c-side, #fff); 9 | color: var(--c-text, #000); 10 | } 11 | th.fc-day-today { 12 | background-color: var(--c-side, #2e53da); 13 | } 14 | th.fc-day-today a { 15 | color: #fff; 16 | } 17 | a.fc-event { 18 | border-radius: 4px; 19 | background-image: linear-gradient( 20 | 0deg, 21 | rgba(255, 255, 255, 0.8), 22 | rgba(255, 255, 255, 0.8) 23 | ); 24 | border-width: 0; 25 | border-left-width: 5px; 26 | padding-left: 5px; 27 | } 28 | a.fc-timeline-event { 29 | min-height: 30px; 30 | } 31 | 32 | @media (max-width: 768px) { 33 | .fc .fc-toolbar { 34 | flex-direction: column-reverse; 35 | gap: 10px; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Samurai1206/ImsFrontend/027d8da275e9e37f2338b5f8084d9ff51742e3aa/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/watermark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Samurai1206/ImsFrontend/027d8da275e9e37f2338b5f8084d9ff51742e3aa/src/assets/images/watermark.png -------------------------------------------------------------------------------- /src/assets/scrollbar.css: -------------------------------------------------------------------------------- 1 | ::-webkit-scrollbar { 2 | width: 15px; 3 | } 4 | ::-webkit-scrollbar-track { 5 | background-color: rgba(255, 255, 255, 0.1); 6 | border-left: 1px solid rgba(0, 0, 0, 0.05); 7 | } 8 | ::-webkit-scrollbar-thumb { 9 | background-color: rgba(0, 0, 0, 0.2); 10 | } 11 | ::-webkit-scrollbar-thumb:hover { 12 | background-color: rgba(0, 0, 0, 0.4); 13 | cursor: pointer; 14 | } 15 | -------------------------------------------------------------------------------- /src/components/DynamicComponent/AddNewComponent.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import Icon from '../UI/Icon/Icon' 3 | import ComponentMenu from '../PageBuilder/ComponentMenu' 4 | 5 | export function AddNewComponent(id: number, order: number) { 6 | const [showMenu, setShowMenu] = useState(false) 7 | 8 | return ( 9 |
10 | 16 |
18 | ) 19 | } 20 | 21 | export default AddNewComponent 22 | -------------------------------------------------------------------------------- /src/components/DynamicComponent/ComponentTester.tsx: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react' 2 | import { useParams, useSearchParams } from 'react-router-dom' 3 | import DynamicComponent from './DynamicComponent' 4 | 5 | function ComponentTester() { 6 | const params = useParams() 7 | const [searchParams] = useSearchParams() 8 | const props = useMemo(() => Object.fromEntries(searchParams), [searchParams]) 9 | const component = params.component 10 | 11 | return 12 | } 13 | 14 | export default ComponentTester 15 | -------------------------------------------------------------------------------- /src/components/DynamicComponent/DC.tsx: -------------------------------------------------------------------------------- 1 | import DynamicComponent from './DynamicComponent' 2 | 3 | interface IDynamicComponent { 4 | component: string 5 | props?: any 6 | row?: any 7 | sub?: object 8 | id?: number 9 | children?: any 10 | onClick?: any 11 | onChange?: any 12 | } 13 | 14 | export function DC({ 15 | component, 16 | props, 17 | row, 18 | sub, 19 | onClick, 20 | onChange, 21 | }: IDynamicComponent) { 22 | return ( 23 | 31 | ) 32 | } 33 | 34 | export default DC 35 | -------------------------------------------------------------------------------- /src/components/DynamicPage/CreateDynamicPage.tsx: -------------------------------------------------------------------------------- 1 | import usePage from '../../hooks/usePage' 2 | import usePageBuilder from '../../hooks/usePageBuilder' 3 | import Button from '../Form/Button/Button' 4 | 5 | export default function CreateDynamicPage() { 6 | const { page } = usePage() 7 | const { createAsDynamicPage } = usePageBuilder() 8 | 9 | return ( 10 | 29 | {clashes !== '' &&
Number of clashes {clashes.length}
} 30 | 31 | ) 32 | } 33 | 34 | export default ClashCheck 35 | -------------------------------------------------------------------------------- /src/components/Form/DatePicker/DatePicker.tsx: -------------------------------------------------------------------------------- 1 | import { DatePicker as DatePickerUI, DatePickerProps } from '@mantine/dates' 2 | 3 | function DatePicker(props: DatePickerProps) { 4 | return 5 | } 6 | 7 | export default DatePicker 8 | -------------------------------------------------------------------------------- /src/components/Form/Form/FormGroup.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react' 2 | import { FormContext } from './Form' 3 | 4 | export function FormGroup({ children, props, ...other }: any) { 5 | return <>{children} 6 | } 7 | 8 | export default FormGroup 9 | -------------------------------------------------------------------------------- /src/components/Form/Form/formHeading/FormHeading.tsx: -------------------------------------------------------------------------------- 1 | type IHeading = { 2 | text?: string 3 | children?: any 4 | style?: object 5 | } 6 | 7 | export function FormHeading({ text, children, style }: IHeading) { 8 | return ( 9 |
23 | {text || children} 24 |
25 | ) 26 | } 27 | 28 | export default FormHeading 29 | -------------------------------------------------------------------------------- /src/components/Form/FormButton/FormButton.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react' 2 | import React from 'react' 3 | import FormContext from '../../../context/FormContext' 4 | import Button from '../Button/Button' 5 | 6 | interface IFormButton { 7 | text?: string 8 | } 9 | 10 | function FormButton({ text = 'Save and approve' }: IFormButton) { 11 | const { changeAndSubmit } = useContext(FormContext) 12 | 13 | const approveChangeHandler = async () => { 14 | changeAndSubmit({ name: 'approved', val: '1' }) 15 | } 16 | 17 | return 27 | {open &&
{children}
} 28 | 29 | ) 30 | } 31 | 32 | export default MenuGroup 33 | -------------------------------------------------------------------------------- /src/components/UI/MenuItem/MenuItem.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react' 2 | import NavLink from '../../UI/NavLink/NavLink' 3 | import AppContext from '../../../context/AppContext' 4 | import Icon from '../Icon/Icon' 5 | import style from './menuItem.module.css' 6 | import { useMediaQuery } from '@mantine/hooks' 7 | 8 | export function MenuItem({ name, text, icon, to, child, children }: any) { 9 | const { setOpenSideNav, openSideNav } = useContext(AppContext) 10 | const mobile = useMediaQuery('(max-width: 767px)') 11 | const noToggle = !mobile 12 | 13 | return ( 14 | !noToggle && setOpenSideNav((o: boolean) => !o)} 16 | className={({ isActive }: any) => 17 | `${style.menu_item}${isActive ? ` ${style.active}` : ''}${ 18 | child ? ` ${style.child}` : '' 19 | }` 20 | } 21 | to={to} 22 | > 23 |
24 | {icon && } 25 | {(mobile ? true : openSideNav) ? name || text : null} 26 |
27 |
28 | ) 29 | } 30 | 31 | export default MenuItem 32 | -------------------------------------------------------------------------------- /src/components/UI/MenuItem/MenuItemTop.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { NavLink } from 'react-router-dom' 3 | import menuStyle from '../Nav/navMenu.module.css' 4 | 5 | export function MenuItemTop({ name, text, to, onClick, child, children }: any) { 6 | function clickHandler() { 7 | if (typeof onClick !== 'undefined') { 8 | onClick() 9 | } 10 | } 11 | 12 | return ( 13 | 15 | `${menuStyle.navLink}${isActive ? ` ${menuStyle.active}` : ''}` 16 | } 17 | to={to} 18 | onClick={clickHandler} 19 | > 20 | {name || text} 21 | 22 | ) 23 | } 24 | 25 | export default MenuItemTop 26 | -------------------------------------------------------------------------------- /src/components/UI/MenuItem/MenuToggle.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | 3 | export function MenuToggle({ name, className, text, to, children }: any) { 4 | console.log('hello') 5 | const [toggle, setToggle] = useState(false) 6 | return ( 7 | <> 8 |
setToggle(!toggle)}> 9 | {name || text} 10 |
11 | {toggle && children} 12 | 13 | ) 14 | } 15 | 16 | export default MenuToggle 17 | -------------------------------------------------------------------------------- /src/components/UI/MenuItem/menuItem.module.css: -------------------------------------------------------------------------------- 1 | .menu_item { 2 | align-items: center; 3 | border-radius: 12px; 4 | background: none; 5 | border: none; 6 | color: #fff; 7 | cursor: pointer; 8 | display: flex; 9 | justify-content: space-between; 10 | padding: 12px 10px 12px 20px; 11 | width: 100%; 12 | } 13 | 14 | .menu_item > div { 15 | gap: 10px; 16 | display: flex; 17 | align-items: center; 18 | } 19 | 20 | .hasChildren { 21 | padding-left: 34px; 22 | display: flex; 23 | flex-direction: column; 24 | gap: 12px; 25 | } 26 | 27 | .hasChildren .menu_item { 28 | padding-top: 9px !important; 29 | padding-bottom: 9px !important; 30 | } 31 | 32 | .child { 33 | padding-left: 20px; 34 | } 35 | 36 | .open { 37 | background-color: #fff; 38 | color: var(--c-side, #2e53da); 39 | } 40 | 41 | .active { 42 | background-color: #fff; 43 | color: var(--c-side, #2e53da); 44 | } 45 | 46 | .menu_item:hover { 47 | background-color: #fff; 48 | color: var(--c-side, #2e53da); 49 | text-decoration: none; 50 | } 51 | -------------------------------------------------------------------------------- /src/components/UI/ModalClose/ModalClose.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react' 2 | import Button from '../../Form/Button/Button' 3 | import ModalContext from '../../../context/ModalContext' 4 | 5 | function ModalClose() { 6 | const { onClose } = useContext(ModalContext) 7 | 8 | return