diff --git a/packages/server/src/modules/App/App.controller.ts b/packages/server/src/modules/App/App.controller.ts index 27fd20110..24fa19368 100644 --- a/packages/server/src/modules/App/App.controller.ts +++ b/packages/server/src/modules/App/App.controller.ts @@ -1,5 +1,4 @@ -import { Controller, Get } from '@nestjs/common'; -import { AppService } from './App.service'; +import { Controller } from '@nestjs/common'; @Controller() export class AppController {} diff --git a/packages/server/src/modules/CreditNotes/models/CreditNote.ts b/packages/server/src/modules/CreditNotes/models/CreditNote.ts index 15ad3a78a..cf969a5b1 100644 --- a/packages/server/src/modules/CreditNotes/models/CreditNote.ts +++ b/packages/server/src/modules/CreditNotes/models/CreditNote.ts @@ -1,5 +1,5 @@ +import { Model, raw } from 'objection'; import { DiscountType } from '@/common/types/Discount'; -import { BaseModel } from '@/models/Model'; import { Branch } from '@/modules/Branches/models/Branch.model'; import { Customer } from '@/modules/Customers/models/Customer'; import { ExportableModel } from '@/modules/Export/decorators/ExportableModel.decorator'; @@ -8,7 +8,6 @@ import { TenantBaseModel } from '@/modules/System/models/TenantBaseModel'; import { InjectModelMeta } from '@/modules/Tenancy/TenancyModels/decorators/InjectModelMeta.decorator'; import { ItemEntry } from '@/modules/TransactionItemEntry/models/ItemEntry'; import { Warehouse } from '@/modules/Warehouses/models/Warehouse.model'; -import { mixin, Model, raw } from 'objection'; import { CreditNoteMeta } from './CreditNote.meta'; import { InjectModelDefaultViews } from '@/modules/Views/decorators/InjectModelDefaultViews.decorator'; import { CreditNoteDefaultViews } from '../constants'; diff --git a/packages/webapp/public/index.html b/packages/webapp/public/index.html index 1af330a07..e177a81a6 100644 --- a/packages/webapp/public/index.html +++ b/packages/webapp/public/index.html @@ -1,4 +1,4 @@ - + @@ -31,7 +31,7 @@ --> Bigcapital - +
diff --git a/packages/webapp/src/components/AdvancedFilter/AdvancedFilterCompatatorField.tsx b/packages/webapp/src/components/AdvancedFilter/AdvancedFilterCompatatorField.tsx index 7f15db95f..4ea11e8e5 100644 --- a/packages/webapp/src/components/AdvancedFilter/AdvancedFilterCompatatorField.tsx +++ b/packages/webapp/src/components/AdvancedFilter/AdvancedFilterCompatatorField.tsx @@ -1,7 +1,7 @@ // @ts-nocheck import React from 'react'; import { Classes } from '@blueprintjs/core'; -import { ListSelect } from '../Select'; +import { FSelect } from '../Forms'; import { getConditionTypeCompatators } from './utils'; export default function DynamicFilterCompatatorField({ @@ -11,9 +11,9 @@ export default function DynamicFilterCompatatorField({ const options = getConditionTypeCompatators(dataType); return ( - - {({ form, field }) => ( - - - - - + + + + + - - { - form.setFieldValue(conditionFieldPath, option.value); - }} - popoverProps={{ - inline: true, - minimal: true, - captureDismiss: true, - }} - itemRenderer={ConditionItemRenderer} - /> - - - - )} - + + + + + ); } @@ -103,20 +96,18 @@ function FilterCompatatorFilter() { const fieldType = get(fieldMeta, 'fieldType'); return ( - - {({ form, field }) => ( - - { - form.setFieldValue(comparatorFieldPath, option.value); - }} - /> - - )} - + + + ); } @@ -169,11 +160,11 @@ function FilterFieldsField() { return ( {({ field, form }) => ( - - + { @@ -188,7 +179,7 @@ function FilterFieldsField() { captureDismiss: true, }} /> - + )} ); @@ -219,7 +210,7 @@ function FilterValueField() { shouldUpdate={shouldFilterValueFieldUpdate} > {({ form: { setFieldValue }, field }) => ( - + - + )} ); diff --git a/packages/webapp/src/components/Alert/index.tsx b/packages/webapp/src/components/Alert/index.tsx index 0bde33523..f63efb99d 100644 --- a/packages/webapp/src/components/Alert/index.tsx +++ b/packages/webapp/src/components/Alert/index.tsx @@ -15,6 +15,7 @@ export function Alert({ title, description, children, intent, className }) { const AlertRoot = styled.div` border: 1px solid rgb(223, 227, 230); + background: var(--color-alert-default-background); padding: 12px; border-radius: 6px; margin-bottom: 20px; @@ -22,40 +23,40 @@ const AlertRoot = styled.div` ${(props) => props.intent === 'danger' && ` - border-color: rgb(249, 198, 198); - background: rgb(255, 248, 248); + border-color: var(--color-alert-danger-border); + background: var(--color-alert-danger-background); ${AlertDesc} { - color: #d95759; + color: var(--color-alert-danger-description-text); } ${AlertTitle} { - color: rgb(205, 43, 49); + color: var(--color-alert-danger-title-text); } `} ${(props) => props.intent === 'primary' && ` - background: #fff; - border-color: #98a8ee; + background: var(--color-alert-primary-background); + border-color: var(--color-alert-primary-border); ${AlertTitle} { - color: #1a3bd4; + color: var(--color-alert-primary-title-text); } ${AlertDesc} { - color: #455883; + color: var(--color-alert-primary-description-text); } `} `; export const AlertTitle = styled.h3` - color: rgb(17, 24, 28); + color: var(--color-alert-default-title-text); margin-bottom: 4px; font-size: 14px; font-weight: 600; `; export const AlertDesc = styled.p` - color: rgb(104, 112, 118); + color: var(--color-alert-default-description-text); margin: 0; `; diff --git a/packages/webapp/src/components/AppShell/AppContentShell/AppContentShell.module.scss b/packages/webapp/src/components/AppShell/AppContentShell/AppContentShell.module.scss index 7d3364303..7f8960ace 100644 --- a/packages/webapp/src/components/AppShell/AppContentShell/AppContentShell.module.scss +++ b/packages/webapp/src/components/AppShell/AppContentShell/AppContentShell.module.scss @@ -14,7 +14,7 @@ width: var(--aside-width); min-width: var(--aside-min-width); height: 100dvh; - border-left: 1px solid rgba(17, 20, 24, 0.15); + border-left: 1px solid var(--color-app-shell-divider); height: inherit; overflow: auto; display: flex; diff --git a/packages/webapp/src/components/Aside/Aside.module.scss b/packages/webapp/src/components/Aside/Aside.module.scss index 73ee0e299..ffeceb60a 100644 --- a/packages/webapp/src/components/Aside/Aside.module.scss +++ b/packages/webapp/src/components/Aside/Aside.module.scss @@ -6,8 +6,8 @@ .title{ align-items: center; - background: #fff; - border-bottom: 1px solid #E1E2E9; + background: var(--color-aside-background); + border-bottom: 1px solid var(--color-aside-divider); display: flex; flex: 0 0 auto; min-height: 40px; @@ -20,6 +20,6 @@ display: flex; flex-direction: column; flex: 1 1 auto; - background-color: #fff; + background-color: var(--color-aside-title-background); overflow-y: auto; } \ No newline at end of file diff --git a/packages/webapp/src/components/Aside/Aside.tsx b/packages/webapp/src/components/Aside/Aside.tsx index a9f8e25e9..20ebc24f6 100644 --- a/packages/webapp/src/components/Aside/Aside.tsx +++ b/packages/webapp/src/components/Aside/Aside.tsx @@ -28,7 +28,6 @@ export function Aside({ {title} - {hideCloseButton !== true && ( diff --git a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx index 649ffa557..315d4ab9d 100644 --- a/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx +++ b/packages/webapp/src/containers/Preferences/CreditNotes/PreferencesCreditNotesForm.tsx @@ -60,8 +60,11 @@ export function PreferencesCreditNotesForm({ isSubmitting }) { } const CardFooterActions = styled.div` + --x-color-border: #e0e7ea; + --x-color-border: rgba(255, 255, 255, 0.25); + padding-top: 16px; - border-top: 1px solid #e0e7ea; + border-top: 1px solid var(--x-color-border); margin-top: 30px; .bp4-button { diff --git a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx index 7e17acc10..678627ddf 100644 --- a/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx +++ b/packages/webapp/src/containers/Preferences/Estimates/PreferencesEstimatesForm.tsx @@ -60,8 +60,11 @@ export function PreferencesEstimatesForm({ isSubmitting }) { } const CardFooterActions = styled.div` + --x-color-border: #e0e7ea; + --x-color-border: rgba(255, 255, 255, 0.25); + padding-top: 16px; - border-top: 1px solid #e0e7ea; + border-top: 1px solid var(--x-color-border); margin-top: 30px; .bp4-button { diff --git a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx index a1949d5f0..3f8cee7c2 100644 --- a/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx +++ b/packages/webapp/src/containers/Preferences/General/GeneralForm.tsx @@ -271,8 +271,11 @@ export default function PreferencesGeneralForm({ isSubmitting }) { } const CardFooterActions = styled.div` + --x-color-border: #e0e7ea; + --x-color-border: rgba(255, 255, 255, 0.15); + padding-top: 16px; - border-top: 1px solid #e0e7ea; + border-top: 1px solid var(--x-color-border); margin-top: 30px; .bp4-button { diff --git a/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx index 9237c58e8..c4e861e91 100644 --- a/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx +++ b/packages/webapp/src/containers/Preferences/Invoices/PreferencesInvoicesForm.tsx @@ -60,8 +60,11 @@ export function PreferencesInvoicesForm({ isSubmitting }) { } const CardFooterActions = styled.div` + --x-color-border: #e0e7ea; + --x-color-border: rgba(255, 255, 255, 0.25); + padding-top: 16px; - border-top: 1px solid #e0e7ea; + border-top: 1px solid var(--x-color-border); margin-top: 30px; .bp4-button { diff --git a/packages/webapp/src/containers/Preferences/PaymentMethods/StripePaymentMethod.tsx b/packages/webapp/src/containers/Preferences/PaymentMethods/StripePaymentMethod.tsx index 6f44ba44d..2b380aa15 100644 --- a/packages/webapp/src/containers/Preferences/PaymentMethods/StripePaymentMethod.tsx +++ b/packages/webapp/src/containers/Preferences/PaymentMethods/StripePaymentMethod.tsx @@ -24,11 +24,13 @@ import { import { DRAWERS } from '@/constants/drawers'; import { MoreIcon } from '@/icons/More'; import { STRIPE_PRICING_LINK } from './constants'; +import { useIsDarkMode } from '@/hooks/useDarkMode'; export function StripePaymentMethod() { const { openDialog } = useDialogActions(); const { openDrawer } = useDrawerActions(); const { openAlert } = useAlertActions(); + const isDarkMode = useIsDarkMode(); const { paymentMethodsState } = usePaymentMethodsBoot(); const stripeState = paymentMethodsState?.stripe; @@ -63,8 +65,9 @@ export function StripePaymentMethod() { - - + {isStripeEnabled && ( diff --git a/packages/webapp/src/containers/Preferences/PaymentMethods/dialogs/StripePreSetupDialog/StripePreSetupDialogContent.tsx b/packages/webapp/src/containers/Preferences/PaymentMethods/dialogs/StripePreSetupDialog/StripePreSetupDialogContent.tsx index 0fa2d7511..b1bc38352 100644 --- a/packages/webapp/src/containers/Preferences/PaymentMethods/dialogs/StripePreSetupDialog/StripePreSetupDialogContent.tsx +++ b/packages/webapp/src/containers/Preferences/PaymentMethods/dialogs/StripePreSetupDialog/StripePreSetupDialogContent.tsx @@ -92,5 +92,5 @@ const PaymentFeatureIcon = styled('span')` position: absolute; left: 12px; top: 2px; - color: #0052cc; + color: var(--color-primary); `; diff --git a/packages/webapp/src/containers/Preferences/PreferencesPageLoader.tsx b/packages/webapp/src/containers/Preferences/PreferencesPageLoader.tsx index 25e8b5eb1..34304aa83 100644 --- a/packages/webapp/src/containers/Preferences/PreferencesPageLoader.tsx +++ b/packages/webapp/src/containers/Preferences/PreferencesPageLoader.tsx @@ -1,15 +1,18 @@ // @ts-nocheck +import { useIsDarkMode } from '@/hooks/useDarkMode'; import ContentLoader from 'react-content-loader'; export default function PreferencesPageLoader(props) { + const isDarkmode = useIsDarkMode(); + return ( diff --git a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx index 42836de51..b72673a5d 100644 --- a/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx +++ b/packages/webapp/src/containers/Preferences/Receipts/PreferencesReceiptsForm.tsx @@ -60,8 +60,11 @@ export function PreferencesReceiptsForm({ isSubmitting }) { } const CardFooterActions = styled.div` + --x-color-border: #e0e7ea; + --x-color-border: rgba(255, 255, 255, 0.25); + padding-top: 16px; - border-top: 1px solid #e0e7ea; + border-top: 1px solid var(--x-color-border); margin-top: 30px; .bp4-button { diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx index 293e63818..caf5e611c 100644 --- a/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx +++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx @@ -79,6 +79,9 @@ export function BillFormFooterRight() { } const BillTotalLines = styled(TotalLines)` + --x-color-text: #555; + --x-color-text: var(--color-light-gray4); + width: 100%; - color: #555555; + color: var(--x-color-text); `; diff --git a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx index 5448139b3..33b1da575 100644 --- a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx +++ b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx @@ -46,6 +46,9 @@ export function VendorCreditNoteFormFooterRight() { } const VendorCreditNoteTotalLines = styled(TotalLines)` + --x-color-text: #555; + --x-color-text: var(--color-light-gray4); + width: 100%; - color: #555555; + color: var(--x-color-text); `; diff --git a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/PaymentMadeFormFooterRight.tsx b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/PaymentMadeFormFooterRight.tsx index 5f1de27df..a903889c5 100644 --- a/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/PaymentMadeFormFooterRight.tsx +++ b/packages/webapp/src/containers/Purchases/PaymentsMade/PaymentForm/PaymentMadeFormFooterRight.tsx @@ -41,6 +41,9 @@ export function PaymentMadeFormFooterRight() { } const PaymentMadeTotalLines = styled(TotalLines)` + --x-color-text: #555; + --x-color-text: var(--color-light-gray4); + width: 100%; - color: #555555; + color: var(--x-color-text); `; diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormFooterRight.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormFooterRight.tsx index e6b381283..faffbcb04 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormFooterRight.tsx @@ -50,6 +50,9 @@ export function CreditNoteFormFooterRight() { } const CreditNoteTotalLines = styled(TotalLines)` + --x-color-text: #555555; + --x-color-text: var(--color-light-gray4); + width: 100%; - color: #555555; + color: var(--x-color-text); `; diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeader.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeader.tsx index 9a3f450e1..115417b0d 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeader.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeader.tsx @@ -4,19 +4,30 @@ import intl from 'react-intl-universal'; import CreditNoteFormHeaderFields from './CreditNoteFormHeaderFields'; import { Group, PageFormBigNumber } from '@/components'; import { useCreditNoteTotalFormatted } from './utils'; +import { useIsDarkMode } from '@/hooks/useDarkMode'; /** * Credit note header. */ function CreditNoteFormHeader() { + const isDarkMode = useIsDarkMode(); + return ( diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx index dcc117900..6652ce3ae 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx @@ -37,7 +37,7 @@ import { } from './utils'; import { PageForm } from '@/components/PageForm'; -/**6 +/** * Estimate form. */ function EstimateForm({ @@ -70,18 +70,18 @@ function EstimateForm({ ...(!isEmpty(estimate) ? { ...transformToEditForm(estimate) } : { - ...defaultEstimate, - // If the auto-increment mode is enabled, take the next estimate - // number from the settings. - ...(estimateAutoIncrementMode && { - estimate_number: estimateNumber, - }), - entries: orderingLinesIndexes(defaultEstimate.entries), - currency_code: base_currency, - terms_conditions: defaultTo(estimateTermsConditions, ''), - note: defaultTo(estimateCustomerNotes, ''), - pdf_template_id: saleEstimateState?.defaultTemplateId, + ...defaultEstimate, + // If the auto-increment mode is enabled, take the next estimate + // number from the settings. + ...(estimateAutoIncrementMode && { + estimate_number: estimateNumber, }), + entries: orderingLinesIndexes(defaultEstimate.entries), + currency_code: base_currency, + terms_conditions: defaultTo(estimateTermsConditions, ''), + note: defaultTo(estimateCustomerNotes, ''), + pdf_template_id: saleEstimateState?.defaultTemplateId, + }), }; // Handles form submit. diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx index c3ff4d13d..0ea997f55 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx @@ -42,6 +42,9 @@ export function EstimateFormFooterRight() { } const EstimateTotalLines = styled(TotalLines)` + --x-color-text: #555; + --x-color-text: var(--color-light-gray4); + width: 100%; - color: #555555; + color: var(--x-color-text); `; diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeader.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeader.tsx index a8d924784..1a622a2c7 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeader.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeader.tsx @@ -5,16 +5,27 @@ import intl from 'react-intl-universal'; import EstimateFormHeaderFields from './EstimateFormHeaderFields'; import { Group, PageFormBigNumber } from '@/components'; import { useEstimateTotalFormatted } from './utils'; +import { useIsDarkMode } from '@/hooks/useDarkMode'; // Estimate form top header. function EstimateFormHeader() { + const isDarkMode = useIsDarkMode(); + return ( diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSnedMailFields.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSnedMailFields.tsx index 6cd0672b8..fffa42e10 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSnedMailFields.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateSendMailDrawer/EstimateSnedMailFields.tsx @@ -7,6 +7,7 @@ import { useDrawerContext } from '@/components/Drawer/DrawerProvider'; import { useDrawerActions } from '@/hooks/state'; import { useSendEstimateFormatArgsOptions } from './hooks'; import { useSendMailItems } from '../SendMailViewDrawer/hooks'; +import { useIsDarkMode } from '@/hooks/useDarkMode'; export function EstimateSendMailFields() { @@ -41,6 +42,7 @@ function EstimateSendMailFooter() { const { isSubmitting } = useFormikContext(); const { name } = useDrawerContext(); const { closeDrawer } = useDrawerActions(); + const isDarkmode = useIsDarkMode(); const handleClose = () => { closeDrawer(name); @@ -50,7 +52,9 @@ function EstimateSendMailFooter() { diff --git a/packages/webapp/src/containers/Sales/Estimates/SendMailViewDrawer/SendMailViewHeader.tsx b/packages/webapp/src/containers/Sales/Estimates/SendMailViewDrawer/SendMailViewHeader.tsx index 98a9c6584..cf701411a 100644 --- a/packages/webapp/src/containers/Sales/Estimates/SendMailViewDrawer/SendMailViewHeader.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/SendMailViewDrawer/SendMailViewHeader.tsx @@ -3,6 +3,7 @@ import { x } from '@xstyled/emotion'; import { Group, Icon } from '@/components'; import { useDrawerContext } from '@/components/Drawer/DrawerProvider'; import { useDrawerActions } from '@/hooks/state'; +import { useIsDarkMode } from '@/hooks/useDarkMode'; interface SendMailViewHeaderProps { label?: string; @@ -16,6 +17,7 @@ export function SendMailViewHeader({ }: SendMailViewHeaderProps) { const { name } = useDrawerContext(); const { closeDrawer } = useDrawerActions(); + const isDarkmode = useIsDarkMode(); const handleClose = () => { closeDrawer(name); @@ -24,14 +26,19 @@ export function SendMailViewHeader({ {label && ( - + {label} )} @@ -39,7 +46,7 @@ export function SendMailViewHeader({