@layerfi/components 0.1.37 → 0.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +154 -39
- package/dist/esm/index.js.map +3 -3
- package/dist/index.d.ts +5 -1
- package/dist/index.js +143 -28
- package/dist/index.js.map +3 -3
- package/dist/styles/index.css +476 -45
- package/dist/styles/index.css.map +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1536,8 +1536,10 @@ declare module '@layerfi/components/components/DatePicker/DatePicker' {
|
|
|
1536
1536
|
popperClassName?: string;
|
|
1537
1537
|
currentDateOption?: boolean;
|
|
1538
1538
|
minDate?: Date;
|
|
1539
|
+
maxDate?: Date;
|
|
1540
|
+
navigateArrows?: boolean;
|
|
1539
1541
|
}
|
|
1540
|
-
export const DatePicker: ({ selected, onChange, mode, dateFormat, timeIntervals, timeCaption, placeholderText, options, wrapperClassName, calendarClassName, popperClassName, minDate, currentDateOption, ...props }: DatePickerProps) => React.JSX.Element;
|
|
1542
|
+
export const DatePicker: ({ selected, onChange, mode, dateFormat, timeIntervals, timeCaption, placeholderText, options, wrapperClassName, calendarClassName, popperClassName, minDate, maxDate, currentDateOption, navigateArrows, ...props }: DatePickerProps) => React.JSX.Element;
|
|
1541
1543
|
export {};
|
|
1542
1544
|
|
|
1543
1545
|
}
|
|
@@ -3647,6 +3649,7 @@ declare module '@layerfi/components/hooks/useProfitAndLoss/useProfitAndLossLTM'
|
|
|
3647
3649
|
loaded?: LoadedStatus;
|
|
3648
3650
|
error?: any;
|
|
3649
3651
|
pullData: (date: Date) => void;
|
|
3652
|
+
refetch: () => void;
|
|
3650
3653
|
};
|
|
3651
3654
|
/**
|
|
3652
3655
|
* Hooks fetch Last Twelve Months sending 12 requests (one for each month).
|
|
@@ -4815,6 +4818,7 @@ declare module '@layerfi/components/types/profit_and_loss' {
|
|
|
4815
4818
|
uncategorizedOutflows: number;
|
|
4816
4819
|
operatingExpensesInverse?: number;
|
|
4817
4820
|
uncategorizedOutflowsInverse?: number;
|
|
4821
|
+
uncategorized_transactions: number;
|
|
4818
4822
|
}
|
|
4819
4823
|
export interface ProfitAndLossSummaries {
|
|
4820
4824
|
type: 'Profit_And_Loss_Summaries';
|
package/dist/index.js
CHANGED
|
@@ -454,9 +454,9 @@ function useSizeClass() {
|
|
|
454
454
|
const [width] = useWindowSize();
|
|
455
455
|
const sizeClass = (0, import_react2.useMemo)(() => {
|
|
456
456
|
switch (true) {
|
|
457
|
-
case width
|
|
457
|
+
case width <= BREAKPOINTS.MOBILE:
|
|
458
458
|
return "mobile";
|
|
459
|
-
case width
|
|
459
|
+
case width <= BREAKPOINTS.TABLET:
|
|
460
460
|
return "tablet";
|
|
461
461
|
default:
|
|
462
462
|
return "desktop";
|
|
@@ -608,8 +608,25 @@ var DEPENDENCIES = {
|
|
|
608
608
|
["STATEMENT_OF_CASH_FLOWS" /* STATEMENT_OF_CASH_FLOWS */]: ALL_TOUCHABLE
|
|
609
609
|
};
|
|
610
610
|
var useDataSync = () => {
|
|
611
|
-
const
|
|
612
|
-
const [
|
|
611
|
+
const initialTimestamp = Date.now();
|
|
612
|
+
const [syncTimestamps, setSyncTimestamps] = (0, import_react7.useState)({
|
|
613
|
+
["BALANCE_SHEET" /* BALANCE_SHEET */]: initialTimestamp,
|
|
614
|
+
["CHART_OF_ACCOUNTS" /* CHART_OF_ACCOUNTS */]: initialTimestamp,
|
|
615
|
+
["JOURNAL" /* JOURNAL */]: initialTimestamp,
|
|
616
|
+
["LEDGER_ACCOUNTS" /* LEDGER_ACCOUNTS */]: initialTimestamp,
|
|
617
|
+
["LINKED_ACCOUNTS" /* LINKED_ACCOUNTS */]: initialTimestamp,
|
|
618
|
+
["PROFIT_AND_LOSS" /* PROFIT_AND_LOSS */]: initialTimestamp,
|
|
619
|
+
["STATEMENT_OF_CASH_FLOWS" /* STATEMENT_OF_CASH_FLOWS */]: initialTimestamp
|
|
620
|
+
});
|
|
621
|
+
const [readTimestamps, setReadTimestamps] = (0, import_react7.useState)({
|
|
622
|
+
["BALANCE_SHEET" /* BALANCE_SHEET */]: initialTimestamp,
|
|
623
|
+
["CHART_OF_ACCOUNTS" /* CHART_OF_ACCOUNTS */]: initialTimestamp,
|
|
624
|
+
["JOURNAL" /* JOURNAL */]: initialTimestamp,
|
|
625
|
+
["LEDGER_ACCOUNTS" /* LEDGER_ACCOUNTS */]: initialTimestamp,
|
|
626
|
+
["LINKED_ACCOUNTS" /* LINKED_ACCOUNTS */]: initialTimestamp,
|
|
627
|
+
["PROFIT_AND_LOSS" /* PROFIT_AND_LOSS */]: initialTimestamp,
|
|
628
|
+
["STATEMENT_OF_CASH_FLOWS" /* STATEMENT_OF_CASH_FLOWS */]: initialTimestamp
|
|
629
|
+
});
|
|
613
630
|
const touch = (model) => {
|
|
614
631
|
setSyncTimestamps({
|
|
615
632
|
...syncTimestamps,
|
|
@@ -7709,7 +7726,7 @@ var DatePicker = ({
|
|
|
7709
7726
|
selected,
|
|
7710
7727
|
onChange,
|
|
7711
7728
|
mode = "dayPicker",
|
|
7712
|
-
dateFormat = mode === "monthPicker" || mode === "monthRangePicker" ? "
|
|
7729
|
+
dateFormat = mode === "monthPicker" || mode === "monthRangePicker" ? "MMM, yyyy" : mode === "timePicker" ? "h:mm aa" : "MMM d, yyyy",
|
|
7713
7730
|
timeIntervals = 15,
|
|
7714
7731
|
timeCaption,
|
|
7715
7732
|
placeholderText,
|
|
@@ -7718,11 +7735,15 @@ var DatePicker = ({
|
|
|
7718
7735
|
calendarClassName,
|
|
7719
7736
|
popperClassName,
|
|
7720
7737
|
minDate,
|
|
7738
|
+
maxDate = /* @__PURE__ */ new Date(),
|
|
7721
7739
|
currentDateOption = true,
|
|
7740
|
+
navigateArrows = mode === "monthPicker",
|
|
7722
7741
|
...props
|
|
7723
7742
|
}) => {
|
|
7743
|
+
const pickerRef = (0, import_react86.useRef)(null);
|
|
7724
7744
|
const [updatePickerDate, setPickerDate] = (0, import_react86.useState)(false);
|
|
7725
7745
|
const [selectedDates, setSelectedDates] = (0, import_react86.useState)(selected);
|
|
7746
|
+
const { isDesktop } = useSizeClass();
|
|
7726
7747
|
const [startDate, setStartDate] = (0, import_react86.useState)(
|
|
7727
7748
|
getDefaultRangeDate("start", mode, selected) ?? /* @__PURE__ */ new Date()
|
|
7728
7749
|
);
|
|
@@ -7762,7 +7783,8 @@ var DatePicker = ({
|
|
|
7762
7783
|
}, [startDate, endDate]);
|
|
7763
7784
|
const wrapperClassNames = (0, import_classnames38.default)(
|
|
7764
7785
|
"Layer__datepicker__wrapper",
|
|
7765
|
-
mode === "timePicker" && "Layer__datepicker__time__wrapper"
|
|
7786
|
+
mode === "timePicker" && "Layer__datepicker__time__wrapper",
|
|
7787
|
+
navigateArrows && "Layer__datepicker__wrapper--arrows"
|
|
7766
7788
|
);
|
|
7767
7789
|
const datePickerWrapperClassNames = (0, import_classnames38.default)(
|
|
7768
7790
|
"Layer__datepicker",
|
|
@@ -7775,6 +7797,7 @@ var DatePicker = ({
|
|
|
7775
7797
|
);
|
|
7776
7798
|
const popperClassNames = (0, import_classnames38.default)(
|
|
7777
7799
|
"Layer__datepicker__popper",
|
|
7800
|
+
mode === "timePicker" && "Layer__datepicker__time__popper",
|
|
7778
7801
|
popperClassName
|
|
7779
7802
|
);
|
|
7780
7803
|
const handleDateChange = (date) => {
|
|
@@ -7805,9 +7828,35 @@ var DatePicker = ({
|
|
|
7805
7828
|
);
|
|
7806
7829
|
}
|
|
7807
7830
|
};
|
|
7831
|
+
const isTodayOrAfter = Boolean(
|
|
7832
|
+
selectedDates instanceof Date && selectedDates >= /* @__PURE__ */ new Date()
|
|
7833
|
+
);
|
|
7834
|
+
const isBeforeMinDate = Boolean(
|
|
7835
|
+
minDate && selectedDates instanceof Date && selectedDates <= minDate
|
|
7836
|
+
);
|
|
7837
|
+
const changeDate = (value) => {
|
|
7838
|
+
if (mode === "dayPicker") {
|
|
7839
|
+
setSelectedDates(
|
|
7840
|
+
new Date(
|
|
7841
|
+
selectedDates.setDate(
|
|
7842
|
+
selectedDates.getDate() + value
|
|
7843
|
+
)
|
|
7844
|
+
)
|
|
7845
|
+
);
|
|
7846
|
+
} else if (mode === "monthPicker") {
|
|
7847
|
+
setSelectedDates(
|
|
7848
|
+
new Date(
|
|
7849
|
+
selectedDates.setMonth(
|
|
7850
|
+
selectedDates.getMonth() + value
|
|
7851
|
+
)
|
|
7852
|
+
)
|
|
7853
|
+
);
|
|
7854
|
+
}
|
|
7855
|
+
};
|
|
7808
7856
|
return /* @__PURE__ */ import_react86.default.createElement("div", { className: wrapperClassNames }, /* @__PURE__ */ import_react86.default.createElement(
|
|
7809
7857
|
import_react_datepicker.default,
|
|
7810
7858
|
{
|
|
7859
|
+
ref: pickerRef,
|
|
7811
7860
|
wrapperClassName: datePickerWrapperClassNames,
|
|
7812
7861
|
startDate: isRangeMode(mode) ? startDate : void 0,
|
|
7813
7862
|
endDate: isRangeMode(mode) ? endDate : void 0,
|
|
@@ -7823,10 +7872,33 @@ var DatePicker = ({
|
|
|
7823
7872
|
renderDayContents: (day) => /* @__PURE__ */ import_react86.default.createElement("span", { className: "Layer__datepicker__day-contents" }, day),
|
|
7824
7873
|
timeIntervals,
|
|
7825
7874
|
timeCaption,
|
|
7875
|
+
timeFormat: "h mm aa",
|
|
7826
7876
|
showTimeSelect: mode === "timePicker",
|
|
7827
7877
|
showTimeSelectOnly: mode === "timePicker",
|
|
7828
7878
|
minDate,
|
|
7829
|
-
maxDate
|
|
7879
|
+
maxDate,
|
|
7880
|
+
withPortal: !isDesktop,
|
|
7881
|
+
onCalendarOpen: () => {
|
|
7882
|
+
if (!isDesktop) {
|
|
7883
|
+
setTimeout(() => {
|
|
7884
|
+
document.getElementById("Layer__datepicker__portal")?.classList.remove("Layer__datepicker__portal--closed");
|
|
7885
|
+
document.getElementById("Layer__datepicker__portal")?.classList.add("Layer__datepicker__portal--opened");
|
|
7886
|
+
}, 10);
|
|
7887
|
+
}
|
|
7888
|
+
},
|
|
7889
|
+
onCalendarClose: () => {
|
|
7890
|
+
if (!isDesktop) {
|
|
7891
|
+
document.getElementById("Layer__datepicker__portal")?.classList.add("Layer__datepicker__portal--closed");
|
|
7892
|
+
document.getElementById("Layer__datepicker__portal")?.classList.remove("Layer__datepicker__portal--opened");
|
|
7893
|
+
}
|
|
7894
|
+
},
|
|
7895
|
+
portalId: "Layer__datepicker__portal",
|
|
7896
|
+
onFocus: (e) => e.target.readOnly = true,
|
|
7897
|
+
onInputClick: () => {
|
|
7898
|
+
if (pickerRef.current && !isDesktop) {
|
|
7899
|
+
pickerRef.current.setOpen(!pickerRef.current.isCalendarOpen);
|
|
7900
|
+
}
|
|
7901
|
+
},
|
|
7830
7902
|
...props
|
|
7831
7903
|
},
|
|
7832
7904
|
mode === "dayRangePicker" && /* @__PURE__ */ import_react86.default.createElement(
|
|
@@ -7836,7 +7908,39 @@ var DatePicker = ({
|
|
|
7836
7908
|
setSelectedDate: setSelectedDates
|
|
7837
7909
|
}
|
|
7838
7910
|
)
|
|
7839
|
-
),
|
|
7911
|
+
), navigateArrows && !isDesktop && /* @__PURE__ */ import_react86.default.createElement(import_react86.default.Fragment, null, /* @__PURE__ */ import_react86.default.createElement(
|
|
7912
|
+
Button,
|
|
7913
|
+
{
|
|
7914
|
+
"aria-label": "Previous Date",
|
|
7915
|
+
className: (0, import_classnames38.default)(
|
|
7916
|
+
"Layer__datepicker__prev-button",
|
|
7917
|
+
isBeforeMinDate && "Layer__datepicker__button--disabled"
|
|
7918
|
+
),
|
|
7919
|
+
onClick: () => changeDate(-1),
|
|
7920
|
+
variant: "secondary" /* secondary */,
|
|
7921
|
+
disabled: isBeforeMinDate
|
|
7922
|
+
},
|
|
7923
|
+
/* @__PURE__ */ import_react86.default.createElement(ChevronLeft_default, { className: "Layer__datepicker__button-icon", size: 16 })
|
|
7924
|
+
), /* @__PURE__ */ import_react86.default.createElement(
|
|
7925
|
+
Button,
|
|
7926
|
+
{
|
|
7927
|
+
"aria-label": "Next Date",
|
|
7928
|
+
variant: "secondary" /* secondary */,
|
|
7929
|
+
className: (0, import_classnames38.default)(
|
|
7930
|
+
"Layer__datepicker__next-button",
|
|
7931
|
+
isTodayOrAfter ? "Layer__datepicker__button--disabled" : void 0
|
|
7932
|
+
),
|
|
7933
|
+
onClick: () => changeDate(1),
|
|
7934
|
+
disabled: isTodayOrAfter
|
|
7935
|
+
},
|
|
7936
|
+
/* @__PURE__ */ import_react86.default.createElement(
|
|
7937
|
+
ChevronRight_default,
|
|
7938
|
+
{
|
|
7939
|
+
className: "Layer__datepicker__button-icon",
|
|
7940
|
+
size: 16
|
|
7941
|
+
}
|
|
7942
|
+
)
|
|
7943
|
+
)), currentDateOption && (mode === "dayPicker" || mode === "monthPicker") && /* @__PURE__ */ import_react86.default.createElement(
|
|
7840
7944
|
Button,
|
|
7841
7945
|
{
|
|
7842
7946
|
className: "Layer__datepicker__current-button",
|
|
@@ -8308,7 +8412,7 @@ var BankTransactionsContent = ({
|
|
|
8308
8412
|
setDateRange: (v) => setDateRange(v)
|
|
8309
8413
|
}
|
|
8310
8414
|
),
|
|
8311
|
-
!listView && /* @__PURE__ */ import_react91.default.createElement(
|
|
8415
|
+
!listView && /* @__PURE__ */ import_react91.default.createElement("div", { className: "Layer__bank-transactions__table-wrapper" }, /* @__PURE__ */ import_react91.default.createElement(
|
|
8312
8416
|
BankTransactionsTable,
|
|
8313
8417
|
{
|
|
8314
8418
|
categorizeView,
|
|
@@ -8321,7 +8425,7 @@ var BankTransactionsContent = ({
|
|
|
8321
8425
|
showDescriptions,
|
|
8322
8426
|
showReceiptUploads
|
|
8323
8427
|
}
|
|
8324
|
-
),
|
|
8428
|
+
)),
|
|
8325
8429
|
isLoading && !bankTransactions ? /* @__PURE__ */ import_react91.default.createElement("div", { className: "Layer__bank-transactions__loader-container" }, /* @__PURE__ */ import_react91.default.createElement(Loader2, null)) : null,
|
|
8326
8430
|
!isLoading && listView && mobileComponent !== "mobileList" ? /* @__PURE__ */ import_react91.default.createElement(
|
|
8327
8431
|
BankTransactionList,
|
|
@@ -8807,6 +8911,7 @@ var useProfitAndLossLTM = ({ currentDate, tagFilter, reportingBasis } = {
|
|
|
8807
8911
|
totalExpenses: 0,
|
|
8808
8912
|
uncategorizedInflows: 0,
|
|
8809
8913
|
uncategorizedOutflows: 0,
|
|
8914
|
+
uncategorized_transactions: 0,
|
|
8810
8915
|
isLoading: true
|
|
8811
8916
|
});
|
|
8812
8917
|
}
|
|
@@ -8857,12 +8962,16 @@ var useProfitAndLossLTM = ({ currentDate, tagFilter, reportingBasis } = {
|
|
|
8857
8962
|
mutate();
|
|
8858
8963
|
}
|
|
8859
8964
|
}, [syncTimestamps]);
|
|
8965
|
+
const refetch = () => {
|
|
8966
|
+
mutate();
|
|
8967
|
+
};
|
|
8860
8968
|
return {
|
|
8861
8969
|
data,
|
|
8862
8970
|
isLoading,
|
|
8863
8971
|
loaded,
|
|
8864
8972
|
error,
|
|
8865
|
-
pullData
|
|
8973
|
+
pullData,
|
|
8974
|
+
refetch
|
|
8866
8975
|
};
|
|
8867
8976
|
};
|
|
8868
8977
|
|
|
@@ -14740,27 +14849,33 @@ var NotificationCard = ({
|
|
|
14740
14849
|
};
|
|
14741
14850
|
|
|
14742
14851
|
// src/components/TransactionToReviewCard/TransactionToReviewCard.tsx
|
|
14852
|
+
var import_date_fns34 = require("date-fns");
|
|
14743
14853
|
var TransactionToReviewCard = ({
|
|
14744
14854
|
onClick,
|
|
14745
14855
|
usePnlDateRange
|
|
14746
14856
|
}) => {
|
|
14747
|
-
const {
|
|
14748
|
-
data,
|
|
14749
|
-
isLoading,
|
|
14750
|
-
loadingStatus,
|
|
14751
|
-
error,
|
|
14752
|
-
refetch,
|
|
14753
|
-
activate: activateBankTransactions
|
|
14754
|
-
} = useBankTransactionsContext();
|
|
14755
14857
|
const { dateRange: contextDateRange } = (0, import_react169.useContext)(ProfitAndLoss.Context);
|
|
14756
14858
|
const dateRange = usePnlDateRange ? contextDateRange : void 0;
|
|
14859
|
+
const [toReview, setToReview] = (0, import_react169.useState)(0);
|
|
14860
|
+
const { data, loaded, error, refetch } = useProfitAndLossLTM({
|
|
14861
|
+
currentDate: dateRange ? dateRange.startDate : (0, import_date_fns34.startOfMonth)(/* @__PURE__ */ new Date())
|
|
14862
|
+
});
|
|
14757
14863
|
(0, import_react169.useEffect)(() => {
|
|
14758
|
-
|
|
14864
|
+
checkTransactionsToReview();
|
|
14759
14865
|
}, []);
|
|
14760
|
-
|
|
14761
|
-
()
|
|
14762
|
-
|
|
14763
|
-
)
|
|
14866
|
+
(0, import_react169.useEffect)(() => {
|
|
14867
|
+
checkTransactionsToReview();
|
|
14868
|
+
}, [dateRange, loaded]);
|
|
14869
|
+
const checkTransactionsToReview = () => {
|
|
14870
|
+
if (data && dateRange) {
|
|
14871
|
+
const monthTx = data.filter(
|
|
14872
|
+
(x) => x.month - 1 === (0, import_date_fns34.getMonth)(dateRange.startDate) && x.year === (0, import_date_fns34.getYear)(dateRange.startDate)
|
|
14873
|
+
);
|
|
14874
|
+
if (monthTx.length > 0) {
|
|
14875
|
+
setToReview(monthTx[0].uncategorized_transactions);
|
|
14876
|
+
}
|
|
14877
|
+
}
|
|
14878
|
+
};
|
|
14764
14879
|
return /* @__PURE__ */ import_react169.default.createElement(
|
|
14765
14880
|
NotificationCard,
|
|
14766
14881
|
{
|
|
@@ -14768,8 +14883,8 @@ var TransactionToReviewCard = ({
|
|
|
14768
14883
|
onClick: () => onClick && onClick()
|
|
14769
14884
|
},
|
|
14770
14885
|
/* @__PURE__ */ import_react169.default.createElement(Text, { size: "sm" /* sm */ }, "Transactions to review"),
|
|
14771
|
-
|
|
14772
|
-
|
|
14886
|
+
loaded === "initial" || loaded === "loading" ? /* @__PURE__ */ import_react169.default.createElement(BadgeLoader, null) : null,
|
|
14887
|
+
loaded === "complete" && error ? /* @__PURE__ */ import_react169.default.createElement(
|
|
14773
14888
|
Badge,
|
|
14774
14889
|
{
|
|
14775
14890
|
variant: "error" /* ERROR */,
|
|
@@ -14779,7 +14894,7 @@ var TransactionToReviewCard = ({
|
|
|
14779
14894
|
},
|
|
14780
14895
|
"Refresh"
|
|
14781
14896
|
) : null,
|
|
14782
|
-
|
|
14897
|
+
loaded === "complete" && !error && toReview > 0 ? /* @__PURE__ */ import_react169.default.createElement(
|
|
14783
14898
|
Badge,
|
|
14784
14899
|
{
|
|
14785
14900
|
variant: "warning" /* WARNING */,
|
|
@@ -14789,7 +14904,7 @@ var TransactionToReviewCard = ({
|
|
|
14789
14904
|
toReview,
|
|
14790
14905
|
" pending"
|
|
14791
14906
|
) : null,
|
|
14792
|
-
|
|
14907
|
+
loaded === "complete" && !error && toReview === 0 ? /* @__PURE__ */ import_react169.default.createElement(
|
|
14793
14908
|
Badge,
|
|
14794
14909
|
{
|
|
14795
14910
|
variant: "success" /* SUCCESS */,
|