@sincpro/mobile 0.4.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/adapters/JsonSerializer.adapter.d.ts +1 -1
- package/dist/adapters/JsonSerializer.adapter.js +2 -2
- package/dist/adapters/ReceiptExporter.adapter.js +10 -2
- package/dist/adapters/repositories/database_table.repository.d.ts +3 -2
- package/dist/adapters/repositories/database_table.repository.js +1 -1
- package/dist/adapters/repositories/document.repository.d.ts +81 -0
- package/dist/adapters/repositories/document.repository.js +653 -0
- package/dist/adapters/repositories/domain_event.repository.d.ts +17 -17
- package/dist/adapters/repositories/domain_event.repository.js +25 -31
- package/dist/adapters/repositories/domain_event_dead_letter.repository.d.ts +10 -10
- package/dist/adapters/repositories/domain_event_dead_letter.repository.js +14 -13
- package/dist/adapters/repositories/event_row.d.ts +13 -0
- package/dist/adapters/repositories/event_row.js +22 -0
- package/dist/adapters/repositories/sqlite_document_store.d.ts +33 -0
- package/dist/adapters/repositories/sqlite_document_store.js +201 -0
- package/dist/domain/connectivity/events.d.ts +5 -5
- package/dist/domain/connectivity/events.js +3 -3
- package/dist/domain/database/criteria.d.ts +19 -0
- package/dist/domain/database/criteria.js +36 -0
- package/dist/domain/database/criteria_clock.d.ts +8 -0
- package/dist/domain/database/criteria_clock.js +305 -0
- package/dist/domain/database/criteria_sql.d.ts +61 -0
- package/dist/domain/database/criteria_sql.js +476 -0
- package/dist/domain/database/database.d.ts +1 -0
- package/dist/domain/database/index.d.ts +3 -1
- package/dist/domain/database/index.js +3 -1
- package/dist/domain/database/migration_plan.d.ts +14 -0
- package/dist/domain/database/migration_plan.js +44 -0
- package/dist/domain/entity/change_tracking.d.ts +21 -0
- package/dist/domain/entity/change_tracking.js +71 -0
- package/dist/domain/entity/checks.d.ts +8 -0
- package/dist/domain/entity/checks.js +82 -0
- package/dist/domain/entity/entity.d.ts +39 -32
- package/dist/domain/entity/entity.js +94 -105
- package/dist/domain/entity/entity_collection.d.ts +15 -30
- package/dist/domain/entity/entity_collection.js +30 -121
- package/dist/domain/entity/index.d.ts +5 -0
- package/dist/domain/entity/index.js +5 -0
- package/dist/domain/entity/reconcile.d.ts +7 -0
- package/dist/domain/entity/reconcile.js +12 -0
- package/dist/domain/entity/relations.d.ts +27 -0
- package/dist/domain/entity/relations.js +69 -0
- package/dist/domain/entity/remote_sync.d.ts +4 -0
- package/dist/domain/entity/remote_sync.js +19 -0
- package/dist/domain/entity/values.d.ts +6 -0
- package/dist/domain/entity/values.js +13 -0
- package/dist/domain/events/catalog.d.ts +29 -0
- package/dist/domain/{events.js → events/catalog.js} +7 -11
- package/dist/domain/events/chain.d.ts +5 -0
- package/dist/domain/events/chain.js +6 -0
- package/dist/domain/{event_sourcing → events}/domain_event.d.ts +20 -22
- package/dist/domain/events/domain_event.js +227 -0
- package/dist/domain/events/index.d.ts +8 -0
- package/dist/domain/events/index.js +8 -0
- package/dist/domain/events/integration_event.d.ts +103 -0
- package/dist/domain/events/integration_event.js +72 -0
- package/dist/domain/events/label.d.ts +2 -0
- package/dist/domain/events/label.js +26 -0
- package/dist/domain/index.d.ts +0 -1
- package/dist/domain/index.js +0 -1
- package/dist/domain/print/events.d.ts +8 -4
- package/dist/domain/print/events.js +9 -4
- package/dist/domain/repositories/document_store.d.ts +33 -0
- package/dist/domain/repositories/document_store.js +5 -0
- package/dist/domain/repositories/hooks.d.ts +23 -0
- package/dist/domain/repositories/hooks.js +32 -0
- package/dist/domain/repositories/index.d.ts +4 -0
- package/dist/domain/repositories/index.js +4 -0
- package/dist/domain/{database → repositories}/repository.d.ts +9 -3
- package/dist/domain/settings.d.ts +4 -1
- package/dist/domain/settings.js +3 -0
- package/dist/domain/webview/events.d.ts +2 -2
- package/dist/domain/webview/events.js +2 -2
- package/dist/entrypoints/db/migrations.js +10 -10
- package/dist/entrypoints/queue/QueueProcessor.d.ts +1 -1
- package/dist/entrypoints/queue/activateDomain.subscriber.d.ts +2 -2
- package/dist/entrypoints/queue/activateDomain.subscriber.js +2 -2
- package/dist/entrypoints/queue/newAppSettings.handler.d.ts +2 -2
- package/dist/entrypoints/queue/newAppSettings.handler.js +1 -1
- package/dist/entrypoints/queue/printImage.subscriber.d.ts +1 -1
- package/dist/entrypoints/queue/printImage.subscriber.js +2 -2
- package/dist/entrypoints/queue/processWebViewMessage.subscriber.d.ts +1 -1
- package/dist/entrypoints/queue/processWebViewMessage.subscriber.js +1 -1
- package/dist/entrypoints/ui/AppShell.js +2 -2
- package/dist/entrypoints/ui/common_provider.d.ts +1 -13
- package/dist/entrypoints/ui/common_provider.js +4 -133
- package/dist/entrypoints/ui/domain_switcher.d.ts +2 -2
- package/dist/event_driven/index.d.ts +1 -0
- package/dist/event_driven/index.js +1 -0
- package/dist/{domain/event_sourcing/event_handler.d.ts → event_driven/subscriber.d.ts} +1 -1
- package/dist/exceptions.d.ts +21 -0
- package/dist/exceptions.js +30 -0
- package/dist/framework/base_module.d.ts +1 -1
- package/dist/framework/createApp.d.ts +3 -3
- package/dist/framework/domain_module.d.ts +1 -1
- package/dist/framework/feature.d.ts +26 -0
- package/dist/framework/feature.js +36 -0
- package/dist/framework/kernel.d.ts +1 -1
- package/dist/framework/kernel.js +17 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/infrastructure/database/connector.d.ts +2 -0
- package/dist/infrastructure/database/connector.js +22 -0
- package/dist/infrastructure/database/index.d.ts +1 -0
- package/dist/infrastructure/database/index.js +1 -0
- package/dist/infrastructure/database/schema.d.ts +9 -0
- package/dist/infrastructure/database/schema.js +61 -0
- package/dist/infrastructure/database/utils.d.ts +2 -0
- package/dist/infrastructure/database/utils.js +12 -4
- package/dist/infrastructure/event_chain.d.ts +6 -0
- package/dist/infrastructure/event_chain.js +25 -0
- package/dist/infrastructure/interceptor/intercept.d.ts +7 -2
- package/dist/infrastructure/interceptor/intercept.js +5 -2
- package/dist/infrastructure/telemetry/tracing/tracing_hooks.d.ts +9 -6
- package/dist/infrastructure/telemetry/tracing/tracing_hooks.js +61 -35
- package/dist/infrastructure/ui/UIEventBus.d.ts +3 -1
- package/dist/infrastructure/ui/UIEventBus.js +8 -1
- package/dist/infrastructure/ui/activity.d.ts +37 -0
- package/dist/infrastructure/ui/activity.js +84 -0
- package/dist/infrastructure/workers/CronWorker.d.ts +6 -4
- package/dist/infrastructure/workers/CronWorker.js +24 -18
- package/dist/infrastructure/workers/EventBus.d.ts +9 -5
- package/dist/infrastructure/workers/EventBus.js +68 -33
- package/dist/services/bluetooth.service.js +16 -14
- package/dist/services/dead_letter_queue.service.d.ts +7 -7
- package/dist/services/dead_letter_queue.service.js +0 -2
- package/dist/services/event.service.d.ts +3 -3
- package/dist/services/event.service.js +1 -1
- package/dist/services/network.service.d.ts +1 -1
- package/dist/services/network.service.js +17 -15
- package/dist/services/printer.service.d.ts +1 -1
- package/dist/services/printer.service.js +50 -44
- package/dist/tools/utils/date.js +4 -3
- package/dist/tools/utils/monetary.d.ts +6 -3
- package/dist/tools/utils/monetary.js +33 -21
- package/dist/tools/utils/serializer.d.ts +1 -1
- package/dist/tools/utils/serializer.js +32 -35
- package/dist/ui/activity/DeviceNotices.d.ts +1 -0
- package/dist/ui/activity/DeviceNotices.js +29 -0
- package/dist/ui/activity/ProcessToast.d.ts +2 -0
- package/dist/ui/activity/ProcessToast.js +71 -0
- package/dist/ui/{components/molecules → activity}/ProcessToastProvider.d.ts +1 -1
- package/dist/ui/activity/index.d.ts +4 -0
- package/dist/ui/activity/index.js +4 -0
- package/dist/ui/activity/useActivity.d.ts +9 -0
- package/dist/ui/activity/useActivity.js +48 -0
- package/dist/ui/components/atoms/DebugBanner.d.ts +1 -1
- package/dist/ui/components/molecules/BluetoothDeviceSelectorModal.d.ts +1 -1
- package/dist/ui/components/molecules/BluetoothDeviceSelectorModal.js +8 -2
- package/dist/ui/components/molecules/DeadLetterErrorBlock.d.ts +1 -1
- package/dist/ui/components/molecules/EventTimelineItem.d.ts +3 -3
- package/dist/ui/components/molecules/EventTimelineItem.js +1 -1
- package/dist/ui/components/molecules/GeoPermissionCard.d.ts +1 -1
- package/dist/ui/components/molecules/TimeZoneSelector.d.ts +1 -1
- package/dist/ui/components/molecules/TimeZoneSelectorModal.d.ts +1 -1
- package/dist/ui/components/molecules/TimeZoneSelectorModal.js +5 -3
- package/dist/ui/components/molecules/index.d.ts +1 -2
- package/dist/ui/components/molecules/index.js +1 -2
- package/dist/ui/components/organisms/BluetoothPrinterSelector.d.ts +1 -1
- package/dist/ui/components/organisms/BluetoothPrinterSelector.js +3 -0
- package/dist/ui/components/organisms/DatabaseInfoRow.d.ts +1 -1
- package/dist/ui/components/organisms/DeadLetterQueueRow.d.ts +5 -4
- package/dist/ui/components/organisms/EventRow.d.ts +4 -4
- package/dist/ui/components/organisms/EventRow.js +1 -1
- package/dist/ui/components/organisms/InjectableWebView.d.ts +2 -2
- package/dist/ui/components/organisms/InjectableWebView.js +6 -3
- package/dist/ui/components/organisms/Receipt.d.ts +2 -1
- package/dist/ui/components/organisms/TableInfoInfoRow.d.ts +1 -1
- package/dist/ui/screens/database/database.context.d.ts +2 -2
- package/dist/ui/screens/database/database.context.js +9 -18
- package/dist/ui/screens/database/database.json_detail.d.ts +1 -1
- package/dist/ui/screens/database/database.list.d.ts +1 -1
- package/dist/ui/screens/database/database.table_rows.d.ts +1 -1
- package/dist/ui/screens/dead_letter_queue/dead_letter_queue.context.d.ts +7 -7
- package/dist/ui/screens/dead_letter_queue/dead_letter_queue.list.d.ts +1 -1
- package/dist/ui/screens/events/events.context.d.ts +6 -6
- package/dist/ui/screens/events/events.context.js +20 -25
- package/dist/ui/screens/events/events.list.d.ts +1 -1
- package/package.json +51 -40
- package/dist/domain/event_sourcing/domain_event.js +0 -164
- package/dist/domain/event_sourcing/event.d.ts +0 -25
- package/dist/domain/event_sourcing/event.js +0 -25
- package/dist/domain/event_sourcing/index.d.ts +0 -2
- package/dist/domain/event_sourcing/index.js +0 -2
- package/dist/domain/events.d.ts +0 -33
- package/dist/infrastructure/ui/ToastHost.d.ts +0 -6
- package/dist/infrastructure/ui/ToastHost.js +0 -28
- package/dist/infrastructure/ui/events.d.ts +0 -1
- package/dist/infrastructure/ui/events.js +0 -1
- package/dist/ui/components/molecules/ProcessToast.d.ts +0 -8
- package/dist/ui/components/molecules/ProcessToast.js +0 -52
- /package/dist/domain/{repositories.d.ts → repositories/catalog.d.ts} +0 -0
- /package/dist/domain/{repositories.js → repositories/catalog.js} +0 -0
- /package/dist/domain/{database → repositories}/repository.js +0 -0
- /package/dist/{domain/event_sourcing/event_handler.js → event_driven/subscriber.js} +0 -0
- /package/dist/ui/{components/molecules → activity}/ProcessToastProvider.js +0 -0
|
@@ -4,7 +4,7 @@ import { Display } from "@sincpro/mobile-ui/Display";
|
|
|
4
4
|
import { Form } from "@sincpro/mobile-ui/Form";
|
|
5
5
|
import { useTheme } from "@sincpro/mobile-ui/theme";
|
|
6
6
|
import { Typography } from "@sincpro/mobile-ui/Typography";
|
|
7
|
-
import {
|
|
7
|
+
import { useMemo, useState } from "react";
|
|
8
8
|
import { TextInput, TouchableOpacity, View } from "react-native";
|
|
9
9
|
const TIMEZONES_LOCALES = {
|
|
10
10
|
bolivia: { timezone: "America/La_Paz", locale: "es-BO" },
|
|
@@ -27,12 +27,14 @@ function TimeZoneSelectorModal({ visible, onClose, onSelect, currentTimezone, })
|
|
|
27
27
|
const theme = useTheme();
|
|
28
28
|
const [query, setQuery] = useState("");
|
|
29
29
|
const [selectedTimezone, setSelectedTimezone] = useState(currentTimezone || null);
|
|
30
|
-
|
|
30
|
+
const [prevVisible, setPrevVisible] = useState(visible);
|
|
31
|
+
if (visible !== prevVisible) {
|
|
32
|
+
setPrevVisible(visible);
|
|
31
33
|
if (visible) {
|
|
32
34
|
setQuery("");
|
|
33
35
|
setSelectedTimezone(currentTimezone || null);
|
|
34
36
|
}
|
|
35
|
-
}
|
|
37
|
+
}
|
|
36
38
|
const timezoneList = useMemo(() => {
|
|
37
39
|
return Object.values(TIMEZONES_LOCALES).map((tz) => ({
|
|
38
40
|
...tz,
|
|
@@ -2,8 +2,7 @@ export { BluetoothDeviceSelectorModal } from "./BluetoothDeviceSelectorModal";
|
|
|
2
2
|
export { default as DeadLetterErrorBlock } from "./DeadLetterErrorBlock";
|
|
3
3
|
export { default as EventTimelineItem } from "./EventTimelineItem";
|
|
4
4
|
export { default as GeoPermissionCard } from "./GeoPermissionCard";
|
|
5
|
-
export { default as ProcessToast } from "./ProcessToast";
|
|
6
|
-
export { ProcessToastProvider } from "./ProcessToastProvider";
|
|
7
5
|
export type { TimezoneLocale } from "./timezone";
|
|
8
6
|
export { TimeZoneSelector } from "./TimeZoneSelector";
|
|
9
7
|
export { TimeZoneSelectorModal } from "./TimeZoneSelectorModal";
|
|
8
|
+
export { DeviceNotices, ProcessToast, ProcessToastProvider, } from "../../../ui/activity";
|
|
@@ -2,7 +2,6 @@ export { BluetoothDeviceSelectorModal } from "./BluetoothDeviceSelectorModal";
|
|
|
2
2
|
export { default as DeadLetterErrorBlock } from "./DeadLetterErrorBlock";
|
|
3
3
|
export { default as EventTimelineItem } from "./EventTimelineItem";
|
|
4
4
|
export { default as GeoPermissionCard } from "./GeoPermissionCard";
|
|
5
|
-
export { default as ProcessToast } from "./ProcessToast";
|
|
6
|
-
export { ProcessToastProvider } from "./ProcessToastProvider";
|
|
7
5
|
export { TimeZoneSelector } from "./TimeZoneSelector";
|
|
8
6
|
export { TimeZoneSelectorModal } from "./TimeZoneSelectorModal";
|
|
7
|
+
export { DeviceNotices, ProcessToast, ProcessToastProvider, } from "../../../ui/activity";
|
|
@@ -5,5 +5,5 @@ interface BluetoothPrinterSelectorProps {
|
|
|
5
5
|
/** Render as section rows (no outer card) — use inside FormViewV2.Content.Section. */
|
|
6
6
|
compact?: boolean;
|
|
7
7
|
}
|
|
8
|
-
declare function BluetoothPrinterSelector({ onPrinterSelected, onConnectionChange, compact, }: BluetoothPrinterSelectorProps): import("react
|
|
8
|
+
declare function BluetoothPrinterSelector({ onPrinterSelected, onConnectionChange, compact, }: BluetoothPrinterSelectorProps): import("react").JSX.Element;
|
|
9
9
|
export { BluetoothPrinterSelector };
|
|
@@ -43,6 +43,9 @@ function BluetoothPrinterSelector({ onPrinterSelected, onConnectionChange, compa
|
|
|
43
43
|
setIsConnected(connected);
|
|
44
44
|
}, []);
|
|
45
45
|
useEffect(() => {
|
|
46
|
+
// Async side effect on mount — checkStatus does sync setState internally,
|
|
47
|
+
// which is the documented React 19 pattern for on-mount async work.
|
|
48
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
46
49
|
checkStatus();
|
|
47
50
|
}, [checkStatus]);
|
|
48
51
|
useEffect(() => {
|
|
@@ -7,5 +7,5 @@ interface DatabaseInfoRowProps {
|
|
|
7
7
|
item: DatabaseInfoRowData;
|
|
8
8
|
onPress?: () => void;
|
|
9
9
|
}
|
|
10
|
-
declare function DatabaseInfoRow({ item, onPress }: DatabaseInfoRowProps): import("react
|
|
10
|
+
declare function DatabaseInfoRow({ item, onPress }: DatabaseInfoRowProps): import("react").JSX.Element;
|
|
11
11
|
export default DatabaseInfoRow;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IntegrationEvent } from "../../../domain/events";
|
|
2
2
|
import { IRowItemProps } from "@sincpro/mobile-ui/views/types/IListView";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import React from "react";
|
|
4
|
+
interface DeadLetterQueueRowProps extends IRowItemProps<IntegrationEvent> {
|
|
5
|
+
onRetry: (event: IntegrationEvent) => Promise<void> | void;
|
|
5
6
|
}
|
|
6
|
-
declare function DeadLetterQueueRow({ item, onRetry }: DeadLetterQueueRowProps):
|
|
7
|
+
declare function DeadLetterQueueRow({ item, onRetry }: DeadLetterQueueRowProps): React.JSX.Element | null;
|
|
7
8
|
export default DeadLetterQueueRow;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IntegrationEvent } from "../../../domain/events";
|
|
2
2
|
interface EventRowProps {
|
|
3
|
-
item:
|
|
4
|
-
onRetry: (event:
|
|
3
|
+
item: IntegrationEvent;
|
|
4
|
+
onRetry: (event: IntegrationEvent) => Promise<void> | void;
|
|
5
5
|
}
|
|
6
|
-
declare function EventRow({ item, onRetry }: EventRowProps): import("react
|
|
6
|
+
declare function EventRow({ item, onRetry }: EventRowProps): import("react").JSX.Element | null;
|
|
7
7
|
export default EventRow;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
|
|
2
|
-
import { EEventStatus } from "../../../domain/
|
|
2
|
+
import { EEventStatus } from "../../../domain/events";
|
|
3
3
|
import { Display } from "@sincpro/mobile-ui/Display";
|
|
4
4
|
import { Form } from "@sincpro/mobile-ui/Form";
|
|
5
5
|
import { Typography } from "@sincpro/mobile-ui/Typography";
|
|
@@ -27,8 +27,8 @@ interface WebViewControlsProps {
|
|
|
27
27
|
onGoForward: () => void;
|
|
28
28
|
onReload: () => void;
|
|
29
29
|
}
|
|
30
|
-
declare function WebViewControls({ canGoBack: _canGoBack, canGoForward: _canGoForward, onGoBack: _onGoBack, onGoForward: _onGoForward, onReload: _onReload, }: WebViewControlsProps): import("react
|
|
31
|
-
declare function InjectableWebView({ url, scripts, injectedJavaScript, onMessage, onNavigationChange, onLoadStart, onLoadEnd, onError, renderLoading, backgroundColor, reloadKey, hardRefreshKey, maxRetries, useDefaultCache, }: InjectableWebViewProps): import("react
|
|
30
|
+
declare function WebViewControls({ canGoBack: _canGoBack, canGoForward: _canGoForward, onGoBack: _onGoBack, onGoForward: _onGoForward, onReload: _onReload, }: WebViewControlsProps): import("react").JSX.Element;
|
|
31
|
+
declare function InjectableWebView({ url, scripts, injectedJavaScript, onMessage, onNavigationChange, onLoadStart, onLoadEnd, onError, renderLoading, backgroundColor, reloadKey, hardRefreshKey, maxRetries, useDefaultCache, }: InjectableWebViewProps): import("react").JSX.Element;
|
|
32
32
|
declare namespace InjectableWebView {
|
|
33
33
|
var Controls: typeof WebViewControls;
|
|
34
34
|
}
|
|
@@ -4,15 +4,18 @@ import { webViewService } from "../../../services/webview.service";
|
|
|
4
4
|
import { useToast } from "@sincpro/mobile-ui/Feedback";
|
|
5
5
|
import Spinner from "@sincpro/mobile-ui/Feedback/Feedback.Spinner";
|
|
6
6
|
import { useBottomInset } from "@sincpro/mobile-ui/layouts/BottomInset";
|
|
7
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
7
|
+
import { useCallback, useEffect, useRef, useState, } from "react";
|
|
8
8
|
import { BackHandler, StyleSheet, View } from "react-native";
|
|
9
9
|
import { SafeAreaView } from "react-native-safe-area-context";
|
|
10
|
-
import
|
|
10
|
+
import RawWebView from "react-native-webview";
|
|
11
|
+
// The library defaults its extra-props generic to `undefined`, and
|
|
12
|
+
// `WebViewProps & undefined` collapses to `never`. An empty record keeps the real props.
|
|
13
|
+
const WebView = RawWebView;
|
|
11
14
|
function WebViewControls({ canGoBack: _canGoBack, canGoForward: _canGoForward, onGoBack: _onGoBack, onGoForward: _onGoForward, onReload: _onReload, }) {
|
|
12
15
|
return _jsx(View, {});
|
|
13
16
|
}
|
|
14
17
|
function WebViewLoadingIndicator({ backgroundColor }) {
|
|
15
|
-
return (_jsx(View, { style: [StyleSheet.
|
|
18
|
+
return (_jsx(View, { style: [StyleSheet.absoluteFill, styles.loading, { backgroundColor }], children: _jsx(Spinner, { size: "large", text: "Cargando p\u00E1gina..." }) }));
|
|
16
19
|
}
|
|
17
20
|
function useWebView() {
|
|
18
21
|
const toast = useToast();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FormatterMap, LabelMap } from "../../../domain/receipt";
|
|
2
|
+
import React from "react";
|
|
2
3
|
interface ReceiptProps {
|
|
3
4
|
data: Record<string, any>;
|
|
4
5
|
labels?: LabelMap;
|
|
@@ -7,5 +8,5 @@ interface ReceiptProps {
|
|
|
7
8
|
formatters?: FormatterMap;
|
|
8
9
|
emptyPlaceholder?: string;
|
|
9
10
|
}
|
|
10
|
-
declare function Receipt({ data, labels, order, strictOrder, formatters, emptyPlaceholder, }: ReceiptProps):
|
|
11
|
+
declare function Receipt({ data, labels, order, strictOrder, formatters, emptyPlaceholder, }: ReceiptProps): React.JSX.Element;
|
|
11
12
|
export default Receipt;
|
|
@@ -5,5 +5,5 @@ interface TableListItemProps {
|
|
|
5
5
|
item: TableRowData;
|
|
6
6
|
onPress?: () => void;
|
|
7
7
|
}
|
|
8
|
-
declare function TableInfoRow({ item, onPress }: TableListItemProps): import("react
|
|
8
|
+
declare function TableInfoRow({ item, onPress }: TableListItemProps): import("react").JSX.Element;
|
|
9
9
|
export default TableInfoRow;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
1
|
+
import React, { ReactNode } from "react";
|
|
2
2
|
export declare enum EDatabaseView {
|
|
3
3
|
TABLES_LIST = "TABLES_LIST",
|
|
4
4
|
TABLE_ROWS = "TABLE_ROWS",
|
|
@@ -27,6 +27,6 @@ interface IDatabaseContext {
|
|
|
27
27
|
}
|
|
28
28
|
export declare function DatabaseProvider({ children }: {
|
|
29
29
|
children: ReactNode;
|
|
30
|
-
}):
|
|
30
|
+
}): React.JSX.Element;
|
|
31
31
|
export declare function useDatabase(): IDatabaseContext;
|
|
32
32
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "nativewind/jsx-runtime";
|
|
2
2
|
import { databaseTablesUseCase } from "../../../services/database_table.service";
|
|
3
3
|
import { safeJsonParse, safeJsonStringify } from "../../../tools/utils/serializer";
|
|
4
|
-
import { createContext, useCallback, useContext,
|
|
4
|
+
import { createContext, useCallback, useContext, useMemo, useState, } from "react";
|
|
5
5
|
export var EDatabaseView;
|
|
6
6
|
(function (EDatabaseView) {
|
|
7
7
|
EDatabaseView["TABLES_LIST"] = "TABLES_LIST";
|
|
@@ -13,7 +13,6 @@ export function DatabaseProvider({ children }) {
|
|
|
13
13
|
const [currentView, setCurrentView] = useState(EDatabaseView.TABLES_LIST);
|
|
14
14
|
const [tables, setTables] = useState([]);
|
|
15
15
|
const [data, setData] = useState([]);
|
|
16
|
-
const [filteredData, setFilteredData] = useState([]);
|
|
17
16
|
const [isLoading, setIsLoading] = useState(false);
|
|
18
17
|
const [selectedTable, setSelectedTable] = useState("");
|
|
19
18
|
const [selectedRowJson, setSelectedRowJson] = useState("");
|
|
@@ -21,13 +20,11 @@ export function DatabaseProvider({ children }) {
|
|
|
21
20
|
const [currentRowIndex, setCurrentRowIndex] = useState(0);
|
|
22
21
|
const [previousSearchQuery, setPreviousSearchQuery] = useState("");
|
|
23
22
|
const [isTransitioning, setIsTransitioning] = useState(false);
|
|
24
|
-
const
|
|
25
|
-
if (!searchQuery.trim())
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
23
|
+
const filteredData = useMemo(() => {
|
|
24
|
+
if (!searchQuery.trim())
|
|
25
|
+
return data;
|
|
29
26
|
const query = searchQuery.toLowerCase().trim();
|
|
30
|
-
|
|
27
|
+
return data.filter((row) => {
|
|
31
28
|
const parsedData = safeJsonParse(typeof row === "string" ? row : JSON.stringify(row));
|
|
32
29
|
if (!parsedData)
|
|
33
30
|
return false;
|
|
@@ -36,11 +33,7 @@ export function DatabaseProvider({ children }) {
|
|
|
36
33
|
const name = parsedData.name?.toLowerCase() || "";
|
|
37
34
|
return remoteId.includes(query) || uuid.includes(query) || name.includes(query);
|
|
38
35
|
});
|
|
39
|
-
setFilteredData(filtered);
|
|
40
36
|
}, [data, searchQuery]);
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
filterData();
|
|
43
|
-
}, [filterData]);
|
|
44
37
|
const loadTables = useCallback(async () => {
|
|
45
38
|
setIsLoading(true);
|
|
46
39
|
try {
|
|
@@ -121,12 +114,10 @@ export function DatabaseProvider({ children }) {
|
|
|
121
114
|
}, [currentRowIndex, filteredData, isTransitioning]);
|
|
122
115
|
const hasNextRow = currentRowIndex < filteredData.length - 1;
|
|
123
116
|
const hasPreviousRow = currentRowIndex > 0;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
}, [searchQuery, previousSearchQuery, currentView, goBackFromJson]);
|
|
117
|
+
if (currentView === EDatabaseView.JSON_DETAIL && searchQuery !== previousSearchQuery) {
|
|
118
|
+
setPreviousSearchQuery(searchQuery);
|
|
119
|
+
goBackFromJson();
|
|
120
|
+
}
|
|
130
121
|
return (_jsx(DatabaseContext.Provider, { value: {
|
|
131
122
|
currentView,
|
|
132
123
|
tables,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare function JsonDetailView(): import("react
|
|
1
|
+
declare function JsonDetailView(): import("react").JSX.Element;
|
|
2
2
|
export default JsonDetailView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function DatabaseList(): import("react
|
|
1
|
+
export default function DatabaseList(): import("react").JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare function TableRowsView(): import("react
|
|
1
|
+
declare function TableRowsView(): import("react").JSX.Element;
|
|
2
2
|
export default TableRowsView;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ReactNode } from "react";
|
|
1
|
+
import { IntegrationEvent } from "../../../domain/events";
|
|
2
|
+
import React, { ReactNode } from "react";
|
|
3
3
|
interface IDeadLetterQueueContext {
|
|
4
|
-
events:
|
|
5
|
-
enrichedEvents:
|
|
4
|
+
events: IntegrationEvent[];
|
|
5
|
+
enrichedEvents: IntegrationEvent[];
|
|
6
6
|
selectedEvents: Set<string>;
|
|
7
7
|
isLoading: boolean;
|
|
8
8
|
isRetrying: boolean;
|
|
9
9
|
isDeleting: boolean;
|
|
10
10
|
loadEvents: () => Promise<void>;
|
|
11
|
-
retryEvent: (event:
|
|
11
|
+
retryEvent: (event: IntegrationEvent) => Promise<void>;
|
|
12
12
|
retrySelectedEvents: () => Promise<{
|
|
13
13
|
success: number;
|
|
14
14
|
failed: number;
|
|
15
15
|
}>;
|
|
16
|
-
deleteEvent: (event:
|
|
16
|
+
deleteEvent: (event: IntegrationEvent) => Promise<void>;
|
|
17
17
|
deleteSelectedEvents: () => Promise<{
|
|
18
18
|
success: number;
|
|
19
19
|
failed: number;
|
|
@@ -29,6 +29,6 @@ interface IDeadLetterQueueContext {
|
|
|
29
29
|
}
|
|
30
30
|
export declare function DeadLetterQueueProvider({ children }: {
|
|
31
31
|
children: ReactNode;
|
|
32
|
-
}):
|
|
32
|
+
}): React.JSX.Element;
|
|
33
33
|
export declare function useDeadLetterQueue(): IDeadLetterQueueContext;
|
|
34
34
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare function DeadLetterQueueList(): import("react
|
|
1
|
+
declare function DeadLetterQueueList(): import("react").JSX.Element;
|
|
2
2
|
export default DeadLetterQueueList;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ReactNode } from "react";
|
|
1
|
+
import { IntegrationEvent } from "../../../domain/events";
|
|
2
|
+
import React, { ReactNode } from "react";
|
|
3
3
|
type EventFilter = "ALL" | "FAILED" | "ACKNOWLEDGED" | "PENDING";
|
|
4
4
|
interface IEventsContext {
|
|
5
|
-
events:
|
|
6
|
-
pagedEvents:
|
|
5
|
+
events: IntegrationEvent[];
|
|
6
|
+
pagedEvents: IntegrationEvent[];
|
|
7
7
|
isLoading: boolean;
|
|
8
8
|
isLoadingMore: boolean;
|
|
9
9
|
isRetrying: boolean;
|
|
@@ -15,11 +15,11 @@ interface IEventsContext {
|
|
|
15
15
|
loadEvents: () => Promise<void>;
|
|
16
16
|
refreshEvents: () => Promise<void>;
|
|
17
17
|
loadMore: () => Promise<void>;
|
|
18
|
-
retryEvent: (event:
|
|
18
|
+
retryEvent: (event: IntegrationEvent) => Promise<void>;
|
|
19
19
|
}
|
|
20
20
|
export declare function EventsProvider({ children, pageSize, }: {
|
|
21
21
|
children: ReactNode;
|
|
22
22
|
pageSize?: number;
|
|
23
|
-
}):
|
|
23
|
+
}): React.JSX.Element;
|
|
24
24
|
export declare function useEvents(): IEventsContext;
|
|
25
25
|
export {};
|
|
@@ -1,66 +1,61 @@
|
|
|
1
1
|
import { jsx as _jsx } from "nativewind/jsx-runtime";
|
|
2
2
|
import { eventService } from "../../../services/event.service";
|
|
3
|
-
import { createContext, useCallback, useContext,
|
|
3
|
+
import { createContext, useCallback, useContext, useMemo, useState, } from "react";
|
|
4
4
|
const EventsContext = createContext(null);
|
|
5
5
|
export function EventsProvider({ children, pageSize = 25, }) {
|
|
6
6
|
const [events, setEvents] = useState([]);
|
|
7
|
-
const [pagedEvents, setPagedEvents] = useState([]);
|
|
8
7
|
const [isLoading, setIsLoading] = useState(false);
|
|
9
8
|
const [isLoadingMore, setIsLoadingMore] = useState(false);
|
|
10
9
|
const [isRetrying, setIsRetrying] = useState(false);
|
|
11
10
|
const [page, setPage] = useState(1);
|
|
12
|
-
const [hasMore, setHasMore] = useState(false);
|
|
13
11
|
const [filter, setFilter] = useState("ALL");
|
|
14
|
-
const
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
17
|
-
return
|
|
12
|
+
const filteredEvents = useMemo(() => {
|
|
13
|
+
if (filter === "ALL")
|
|
14
|
+
return events;
|
|
15
|
+
return events.filter((ev) => {
|
|
18
16
|
if (!ev.status)
|
|
19
17
|
return false;
|
|
20
|
-
if (
|
|
18
|
+
if (filter === "FAILED")
|
|
21
19
|
return ev.status === "FAILED";
|
|
22
|
-
if (
|
|
20
|
+
if (filter === "ACKNOWLEDGED")
|
|
23
21
|
return ev.status === "ACKNOWLEDGED";
|
|
24
|
-
if (
|
|
22
|
+
if (filter === "PENDING")
|
|
25
23
|
return ev.status === "PENDING";
|
|
26
24
|
return true;
|
|
27
25
|
});
|
|
28
|
-
}, []);
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
setPage(
|
|
35
|
-
}
|
|
26
|
+
}, [events, filter]);
|
|
27
|
+
const pagedEvents = useMemo(() => filteredEvents.slice(0, page * pageSize), [filteredEvents, page, pageSize]);
|
|
28
|
+
const hasMore = pagedEvents.length < filteredEvents.length;
|
|
29
|
+
const [prevFilter, setPrevFilter] = useState(filter);
|
|
30
|
+
if (filter !== prevFilter) {
|
|
31
|
+
setPrevFilter(filter);
|
|
32
|
+
setPage(1);
|
|
33
|
+
}
|
|
36
34
|
const loadEvents = useCallback(async () => {
|
|
37
35
|
setIsLoading(true);
|
|
38
36
|
try {
|
|
39
37
|
const fetched = await eventService.listAllEvents();
|
|
40
38
|
setEvents(fetched);
|
|
41
|
-
|
|
39
|
+
setPage(1);
|
|
42
40
|
}
|
|
43
41
|
finally {
|
|
44
42
|
setIsLoading(false);
|
|
45
43
|
}
|
|
46
|
-
}, [
|
|
44
|
+
}, []);
|
|
47
45
|
const refreshEvents = useCallback(async () => {
|
|
48
46
|
await loadEvents();
|
|
49
47
|
}, [loadEvents]);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
paginate(events, 1, filter);
|
|
52
|
-
}, [events, filter, paginate]);
|
|
53
48
|
const loadMore = useCallback(async () => {
|
|
54
49
|
if (isLoadingMore || isLoading || !hasMore)
|
|
55
50
|
return;
|
|
56
51
|
setIsLoadingMore(true);
|
|
57
52
|
try {
|
|
58
|
-
|
|
53
|
+
setPage((p) => p + 1);
|
|
59
54
|
}
|
|
60
55
|
finally {
|
|
61
56
|
setIsLoadingMore(false);
|
|
62
57
|
}
|
|
63
|
-
}, [
|
|
58
|
+
}, [hasMore, isLoading, isLoadingMore]);
|
|
64
59
|
const retryEvent = useCallback(async (event) => {
|
|
65
60
|
setIsRetrying(true);
|
|
66
61
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function EventsScreen(): import("react
|
|
1
|
+
export default function EventsScreen(): import("react").JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sincpro/mobile",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Sincpro Mobile framework core: offline-first infra (DB, queue/events, cron), DDD patterns, adapters, AppShell and module-driven composition for React Native",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -26,23 +26,27 @@
|
|
|
26
26
|
"repository": "https://github.com/Sincpro-SRL/sincpro_mobile",
|
|
27
27
|
"author": "Gutierrez, Andres <andres.gutierrez@sincpro.com.bo>",
|
|
28
28
|
"license": "MIT",
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=26"
|
|
31
|
+
},
|
|
29
32
|
"dependencies": {
|
|
30
|
-
"@opentelemetry/api": "^1.9.
|
|
31
|
-
"@opentelemetry/core": "^2.
|
|
32
|
-
"@opentelemetry/resources": "^2.
|
|
33
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
33
|
+
"@opentelemetry/api": "^1.9.1",
|
|
34
|
+
"@opentelemetry/core": "^2.10.0",
|
|
35
|
+
"@opentelemetry/resources": "^2.10.0",
|
|
36
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
37
|
+
"@sincpro/client-framework": "^0.6.0",
|
|
38
|
+
"@sincpro/criteria": "^2.1.0",
|
|
34
39
|
"async-mutex": "^0.5.0",
|
|
35
40
|
"big.js": "^7.0.1",
|
|
36
|
-
"dayjs": "^1.11.
|
|
41
|
+
"dayjs": "^1.11.21",
|
|
37
42
|
"mitt": "^3.0.1",
|
|
38
43
|
"pdf-lib": "^1.17.1",
|
|
39
|
-
"tailwind-variants": "^3.2.2"
|
|
40
|
-
"uuid": "^13.0.0"
|
|
44
|
+
"tailwind-variants": "^3.2.2"
|
|
41
45
|
},
|
|
42
46
|
"peerDependencies": {
|
|
43
47
|
"@react-navigation/native": ">=7",
|
|
44
48
|
"@react-navigation/native-stack": ">=7",
|
|
45
|
-
"@sincpro/mobile-ui": "^0.
|
|
49
|
+
"@sincpro/mobile-ui": "^2.0.0",
|
|
46
50
|
"expo-background-task": "*",
|
|
47
51
|
"expo-clipboard": "*",
|
|
48
52
|
"expo-crypto": "*",
|
|
@@ -56,7 +60,7 @@
|
|
|
56
60
|
"expo-splash-screen": "*",
|
|
57
61
|
"expo-sqlite": "*",
|
|
58
62
|
"expo-task-manager": "*",
|
|
59
|
-
"nativewind": ">=4",
|
|
63
|
+
"nativewind": ">=4.2.7",
|
|
60
64
|
"react": "*",
|
|
61
65
|
"react-native": "*",
|
|
62
66
|
"react-native-gesture-handler": "*",
|
|
@@ -65,48 +69,53 @@
|
|
|
65
69
|
"react-native-screens": "*",
|
|
66
70
|
"react-native-toast-message": "*",
|
|
67
71
|
"react-native-view-shot": "*",
|
|
68
|
-
"react-native-webview": "*"
|
|
72
|
+
"react-native-webview": "*",
|
|
73
|
+
"react-native-worklets": "*"
|
|
69
74
|
},
|
|
70
75
|
"devDependencies": {
|
|
71
76
|
"@opentelemetry/api": "^1.9.0",
|
|
72
77
|
"@react-navigation/native": "^7.0.0",
|
|
73
78
|
"@react-navigation/native-stack": "^7.0.0",
|
|
74
|
-
"@
|
|
79
|
+
"@expo-google-fonts/ibm-plex-mono": "^0.4.1",
|
|
80
|
+
"@expo-google-fonts/ibm-plex-sans": "^0.4.1",
|
|
81
|
+
"@sincpro/mobile-ui": "^2.0.0",
|
|
75
82
|
"@types/big.js": "^6.2.2",
|
|
76
|
-
"@types/react": "~19.
|
|
77
|
-
"@types/uuid": "^10.0.0",
|
|
83
|
+
"@types/react": "~19.3.0",
|
|
78
84
|
"eslint": "^9.35.0",
|
|
79
|
-
"eslint-config-expo": "~
|
|
85
|
+
"eslint-config-expo": "~58.0.4",
|
|
80
86
|
"eslint-config-prettier": "^10.1.8",
|
|
81
87
|
"eslint-plugin-prettier": "^5.5.4",
|
|
82
88
|
"eslint-plugin-react": "^7.37.2",
|
|
83
89
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
84
|
-
"expo-background-task": "~
|
|
85
|
-
"expo-clipboard": "~
|
|
86
|
-
"expo-crypto": "~
|
|
87
|
-
"expo-file-system": "~
|
|
88
|
-
"expo-
|
|
89
|
-
"expo-
|
|
90
|
-
"expo-
|
|
91
|
-
"expo-
|
|
92
|
-
"expo-
|
|
93
|
-
"expo-
|
|
94
|
-
"expo-
|
|
95
|
-
"expo-
|
|
96
|
-
"expo-
|
|
97
|
-
"
|
|
90
|
+
"expo-background-task": "~58.0.12",
|
|
91
|
+
"expo-clipboard": "~58.0.4",
|
|
92
|
+
"expo-crypto": "~58.0.7",
|
|
93
|
+
"expo-file-system": "~58.0.13",
|
|
94
|
+
"expo-image": "~58.0.18",
|
|
95
|
+
"expo-linking": "~58.0.16",
|
|
96
|
+
"expo-localization": "~58.0.5",
|
|
97
|
+
"expo-location": "~58.0.20",
|
|
98
|
+
"expo-network": "~58.0.4",
|
|
99
|
+
"expo-print": "~58.0.8",
|
|
100
|
+
"expo-sharing": "~58.0.22",
|
|
101
|
+
"expo-splash-screen": "~58.0.13",
|
|
102
|
+
"expo-sqlite": "~58.0.15",
|
|
103
|
+
"expo-task-manager": "~58.0.13",
|
|
104
|
+
"nativewind": "4.2.7",
|
|
98
105
|
"prettier": "^3.6.2",
|
|
99
|
-
"react": "19.
|
|
100
|
-
"react-native": "0.
|
|
101
|
-
"react-native-gesture-handler": "~
|
|
102
|
-
"react-native-keyboard-controller": "1.
|
|
103
|
-
"react-native-reanimated": "
|
|
104
|
-
"react-native-safe-area-context": "~5.
|
|
105
|
-
"react-native-screens": "~4.
|
|
106
|
-
"react-native-svg": "15.
|
|
106
|
+
"react": "19.3.0",
|
|
107
|
+
"react-native": "0.88.1",
|
|
108
|
+
"react-native-gesture-handler": "~3.3.0",
|
|
109
|
+
"react-native-keyboard-controller": "1.22.7",
|
|
110
|
+
"react-native-reanimated": "4.7.1",
|
|
111
|
+
"react-native-safe-area-context": "~5.11.1",
|
|
112
|
+
"react-native-screens": "~4.30.1",
|
|
113
|
+
"react-native-svg": "15.16.0",
|
|
107
114
|
"react-native-toast-message": "^2.3.3",
|
|
108
|
-
"react-native-view-shot": "
|
|
109
|
-
"react-native-webview": "
|
|
115
|
+
"react-native-view-shot": "6.1.1",
|
|
116
|
+
"react-native-webview": "14.0.1",
|
|
117
|
+
"react-native-worklets": "0.13.0",
|
|
118
|
+
"tailwindcss": "3.4.19",
|
|
110
119
|
"tsc-alias": "^1.8.17",
|
|
111
120
|
"tsx": "^4.22.4",
|
|
112
121
|
"typescript": "~5.9.2"
|
|
@@ -115,7 +124,9 @@
|
|
|
115
124
|
".": "./dist/index.js",
|
|
116
125
|
"./domain": "./dist/domain/index.js",
|
|
117
126
|
"./domain/entity": "./dist/domain/entity/index.js",
|
|
118
|
-
"./domain/
|
|
127
|
+
"./domain/events": "./dist/domain/events/index.js",
|
|
128
|
+
"./domain/repositories": "./dist/domain/repositories/index.js",
|
|
129
|
+
"./event_driven": "./dist/event_driven/index.js",
|
|
119
130
|
"./domain/database": "./dist/domain/database/index.js",
|
|
120
131
|
"./domain/connectivity": "./dist/domain/connectivity/index.js",
|
|
121
132
|
"./domain/print": "./dist/domain/print/index.js",
|