@pfm-platform/partners-feature 0.1.1

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/index.cjs ADDED
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var partnersDataAccess = require('@pfm-platform/partners-data-access');
5
+
6
+ // src/hooks/usePartnerConfig.ts
7
+ function usePartnerConfig() {
8
+ const { data: partner } = partnersDataAccess.useCurrentPartner();
9
+ return react.useMemo(() => {
10
+ if (!partner) {
11
+ return null;
12
+ }
13
+ return {
14
+ productName: partner.product_name,
15
+ browserTitle: partner.browser_title,
16
+ domain: partner.domain,
17
+ isDemo: partner.demo
18
+ };
19
+ }, [partner]);
20
+ }
21
+ function usePartnerFeatures() {
22
+ const { data: partner } = partnersDataAccess.useCurrentPartner();
23
+ return react.useMemo(() => {
24
+ if (!partner) {
25
+ return null;
26
+ }
27
+ const hasAggregation = partner.modules && typeof partner.modules === "object" && "aggregation" in partner.modules;
28
+ const hasMobile = partner.modules && typeof partner.modules === "object" && "mobile" in partner.modules;
29
+ return {
30
+ alertsEnabled: partner.partner_alerts_enabled,
31
+ modules: partner.modules,
32
+ featuredSearches: partner.featured_searches,
33
+ hasAggregation,
34
+ hasMobile
35
+ };
36
+ }, [partner]);
37
+ }
38
+
39
+ exports.usePartnerConfig = usePartnerConfig;
40
+ exports.usePartnerFeatures = usePartnerFeatures;
41
+ //# sourceMappingURL=index.cjs.map
42
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/usePartnerConfig.ts","../src/hooks/usePartnerFeatures.ts"],"names":["useCurrentPartner","useMemo"],"mappings":";;;;;;AAoBO,SAAS,gBAAA,GAAyC;AACvD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAIA,oCAAA,EAAkB;AAE5C,EAAA,OAAOC,cAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,aAAa,OAAA,CAAQ,YAAA;AAAA,MACrB,cAAc,OAAA,CAAQ,aAAA;AAAA,MACtB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd;ACbO,SAAS,kBAAA,GAA6C;AAC3D,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAID,oCAAAA,EAAkB;AAE5C,EAAA,OAAOC,cAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GACJ,QAAQ,OAAA,IACR,OAAO,QAAQ,OAAA,KAAY,QAAA,IAC3B,iBAAiB,OAAA,CAAQ,OAAA;AAE3B,IAAA,MAAM,SAAA,GACJ,QAAQ,OAAA,IACR,OAAO,QAAQ,OAAA,KAAY,QAAA,IAC3B,YAAY,OAAA,CAAQ,OAAA;AAEtB,IAAA,OAAO;AAAA,MACL,eAAe,OAAA,CAAQ,sBAAA;AAAA,MACvB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,kBAAkB,OAAA,CAAQ,iBAAA;AAAA,MAC1B,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd","file":"index.cjs","sourcesContent":["import { useMemo } from 'react';\nimport { useCurrentPartner } from '@pfm-platform/partners-data-access';\n\nexport interface PartnerConfig {\n productName: string;\n browserTitle: string;\n domain: string;\n isDemo: boolean;\n}\n\n/**\n * Extract partner configuration details\n *\n * Business logic:\n * - Provides clean configuration object with core partner settings\n * - Normalizes field names (product_name → productName, browser_title → browserTitle)\n * - Includes demo flag for identifying demo environments\n *\n * @returns Partner configuration with product name, browser title, domain, demo flag\n */\nexport function usePartnerConfig(): PartnerConfig | null {\n const { data: partner } = useCurrentPartner();\n\n return useMemo(() => {\n if (!partner) {\n return null;\n }\n\n return {\n productName: partner.product_name,\n browserTitle: partner.browser_title,\n domain: partner.domain,\n isDemo: partner.demo,\n };\n }, [partner]);\n}\n","import { useMemo } from 'react';\nimport { useCurrentPartner } from '@pfm-platform/partners-data-access';\n\nexport interface PartnerFeatures {\n alertsEnabled: boolean;\n modules: Record<string, unknown>;\n featuredSearches: unknown[];\n hasAggregation: boolean;\n hasMobile: boolean;\n}\n\n/**\n * Extract partner feature flags and module configurations\n *\n * Business logic:\n * - Provides feature availability flags for conditional rendering\n * - Normalizes field names (partner_alerts_enabled → alertsEnabled)\n * - Checks common module availability (aggregation, mobile)\n * - Exposes dynamic modules and featured_searches for custom configuration\n *\n * @returns Partner feature flags and module configurations\n */\nexport function usePartnerFeatures(): PartnerFeatures | null {\n const { data: partner } = useCurrentPartner();\n\n return useMemo(() => {\n if (!partner) {\n return null;\n }\n\n // Check for common module configurations\n const hasAggregation =\n partner.modules &&\n typeof partner.modules === 'object' &&\n 'aggregation' in partner.modules;\n\n const hasMobile =\n partner.modules &&\n typeof partner.modules === 'object' &&\n 'mobile' in partner.modules;\n\n return {\n alertsEnabled: partner.partner_alerts_enabled,\n modules: partner.modules,\n featuredSearches: partner.featured_searches,\n hasAggregation,\n hasMobile,\n };\n }, [partner]);\n}\n"]}
@@ -0,0 +1,39 @@
1
+ interface PartnerConfig {
2
+ productName: string;
3
+ browserTitle: string;
4
+ domain: string;
5
+ isDemo: boolean;
6
+ }
7
+ /**
8
+ * Extract partner configuration details
9
+ *
10
+ * Business logic:
11
+ * - Provides clean configuration object with core partner settings
12
+ * - Normalizes field names (product_name → productName, browser_title → browserTitle)
13
+ * - Includes demo flag for identifying demo environments
14
+ *
15
+ * @returns Partner configuration with product name, browser title, domain, demo flag
16
+ */
17
+ declare function usePartnerConfig(): PartnerConfig | null;
18
+
19
+ interface PartnerFeatures {
20
+ alertsEnabled: boolean;
21
+ modules: Record<string, unknown>;
22
+ featuredSearches: unknown[];
23
+ hasAggregation: boolean;
24
+ hasMobile: boolean;
25
+ }
26
+ /**
27
+ * Extract partner feature flags and module configurations
28
+ *
29
+ * Business logic:
30
+ * - Provides feature availability flags for conditional rendering
31
+ * - Normalizes field names (partner_alerts_enabled → alertsEnabled)
32
+ * - Checks common module availability (aggregation, mobile)
33
+ * - Exposes dynamic modules and featured_searches for custom configuration
34
+ *
35
+ * @returns Partner feature flags and module configurations
36
+ */
37
+ declare function usePartnerFeatures(): PartnerFeatures | null;
38
+
39
+ export { type PartnerConfig, type PartnerFeatures, usePartnerConfig, usePartnerFeatures };
@@ -0,0 +1,39 @@
1
+ interface PartnerConfig {
2
+ productName: string;
3
+ browserTitle: string;
4
+ domain: string;
5
+ isDemo: boolean;
6
+ }
7
+ /**
8
+ * Extract partner configuration details
9
+ *
10
+ * Business logic:
11
+ * - Provides clean configuration object with core partner settings
12
+ * - Normalizes field names (product_name → productName, browser_title → browserTitle)
13
+ * - Includes demo flag for identifying demo environments
14
+ *
15
+ * @returns Partner configuration with product name, browser title, domain, demo flag
16
+ */
17
+ declare function usePartnerConfig(): PartnerConfig | null;
18
+
19
+ interface PartnerFeatures {
20
+ alertsEnabled: boolean;
21
+ modules: Record<string, unknown>;
22
+ featuredSearches: unknown[];
23
+ hasAggregation: boolean;
24
+ hasMobile: boolean;
25
+ }
26
+ /**
27
+ * Extract partner feature flags and module configurations
28
+ *
29
+ * Business logic:
30
+ * - Provides feature availability flags for conditional rendering
31
+ * - Normalizes field names (partner_alerts_enabled → alertsEnabled)
32
+ * - Checks common module availability (aggregation, mobile)
33
+ * - Exposes dynamic modules and featured_searches for custom configuration
34
+ *
35
+ * @returns Partner feature flags and module configurations
36
+ */
37
+ declare function usePartnerFeatures(): PartnerFeatures | null;
38
+
39
+ export { type PartnerConfig, type PartnerFeatures, usePartnerConfig, usePartnerFeatures };
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ import { useMemo } from 'react';
2
+ import { useCurrentPartner } from '@pfm-platform/partners-data-access';
3
+
4
+ // src/hooks/usePartnerConfig.ts
5
+ function usePartnerConfig() {
6
+ const { data: partner } = useCurrentPartner();
7
+ return useMemo(() => {
8
+ if (!partner) {
9
+ return null;
10
+ }
11
+ return {
12
+ productName: partner.product_name,
13
+ browserTitle: partner.browser_title,
14
+ domain: partner.domain,
15
+ isDemo: partner.demo
16
+ };
17
+ }, [partner]);
18
+ }
19
+ function usePartnerFeatures() {
20
+ const { data: partner } = useCurrentPartner();
21
+ return useMemo(() => {
22
+ if (!partner) {
23
+ return null;
24
+ }
25
+ const hasAggregation = partner.modules && typeof partner.modules === "object" && "aggregation" in partner.modules;
26
+ const hasMobile = partner.modules && typeof partner.modules === "object" && "mobile" in partner.modules;
27
+ return {
28
+ alertsEnabled: partner.partner_alerts_enabled,
29
+ modules: partner.modules,
30
+ featuredSearches: partner.featured_searches,
31
+ hasAggregation,
32
+ hasMobile
33
+ };
34
+ }, [partner]);
35
+ }
36
+
37
+ export { usePartnerConfig, usePartnerFeatures };
38
+ //# sourceMappingURL=index.js.map
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/usePartnerConfig.ts","../src/hooks/usePartnerFeatures.ts"],"names":["useCurrentPartner","useMemo"],"mappings":";;;;AAoBO,SAAS,gBAAA,GAAyC;AACvD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,iBAAA,EAAkB;AAE5C,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,aAAa,OAAA,CAAQ,YAAA;AAAA,MACrB,cAAc,OAAA,CAAQ,aAAA;AAAA,MACtB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd;ACbO,SAAS,kBAAA,GAA6C;AAC3D,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAIA,iBAAAA,EAAkB;AAE5C,EAAA,OAAOC,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GACJ,QAAQ,OAAA,IACR,OAAO,QAAQ,OAAA,KAAY,QAAA,IAC3B,iBAAiB,OAAA,CAAQ,OAAA;AAE3B,IAAA,MAAM,SAAA,GACJ,QAAQ,OAAA,IACR,OAAO,QAAQ,OAAA,KAAY,QAAA,IAC3B,YAAY,OAAA,CAAQ,OAAA;AAEtB,IAAA,OAAO;AAAA,MACL,eAAe,OAAA,CAAQ,sBAAA;AAAA,MACvB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,kBAAkB,OAAA,CAAQ,iBAAA;AAAA,MAC1B,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd","file":"index.js","sourcesContent":["import { useMemo } from 'react';\nimport { useCurrentPartner } from '@pfm-platform/partners-data-access';\n\nexport interface PartnerConfig {\n productName: string;\n browserTitle: string;\n domain: string;\n isDemo: boolean;\n}\n\n/**\n * Extract partner configuration details\n *\n * Business logic:\n * - Provides clean configuration object with core partner settings\n * - Normalizes field names (product_name → productName, browser_title → browserTitle)\n * - Includes demo flag for identifying demo environments\n *\n * @returns Partner configuration with product name, browser title, domain, demo flag\n */\nexport function usePartnerConfig(): PartnerConfig | null {\n const { data: partner } = useCurrentPartner();\n\n return useMemo(() => {\n if (!partner) {\n return null;\n }\n\n return {\n productName: partner.product_name,\n browserTitle: partner.browser_title,\n domain: partner.domain,\n isDemo: partner.demo,\n };\n }, [partner]);\n}\n","import { useMemo } from 'react';\nimport { useCurrentPartner } from '@pfm-platform/partners-data-access';\n\nexport interface PartnerFeatures {\n alertsEnabled: boolean;\n modules: Record<string, unknown>;\n featuredSearches: unknown[];\n hasAggregation: boolean;\n hasMobile: boolean;\n}\n\n/**\n * Extract partner feature flags and module configurations\n *\n * Business logic:\n * - Provides feature availability flags for conditional rendering\n * - Normalizes field names (partner_alerts_enabled → alertsEnabled)\n * - Checks common module availability (aggregation, mobile)\n * - Exposes dynamic modules and featured_searches for custom configuration\n *\n * @returns Partner feature flags and module configurations\n */\nexport function usePartnerFeatures(): PartnerFeatures | null {\n const { data: partner } = useCurrentPartner();\n\n return useMemo(() => {\n if (!partner) {\n return null;\n }\n\n // Check for common module configurations\n const hasAggregation =\n partner.modules &&\n typeof partner.modules === 'object' &&\n 'aggregation' in partner.modules;\n\n const hasMobile =\n partner.modules &&\n typeof partner.modules === 'object' &&\n 'mobile' in partner.modules;\n\n return {\n alertsEnabled: partner.partner_alerts_enabled,\n modules: partner.modules,\n featuredSearches: partner.featured_searches,\n hasAggregation,\n hasMobile,\n };\n }, [partner]);\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@pfm-platform/partners-feature",
3
+ "version": "0.1.1",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "dependencies": {
7
+ "react": "19.2.0",
8
+ "@pfm-platform/partners-data-access": "0.1.1",
9
+ "@pfm-platform/shared": "0.0.1"
10
+ },
11
+ "devDependencies": {
12
+ "@tanstack/react-query": "5.90.9",
13
+ "@testing-library/react": "^16.3.0",
14
+ "@types/react": "19.2.5",
15
+ "@vitejs/plugin-react": "^5.1.1",
16
+ "@vitest/coverage-v8": "^4.0.9",
17
+ "vitest": "4.0.9"
18
+ },
19
+ "module": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js",
25
+ "require": "./dist/index.cjs"
26
+ }
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md"
31
+ ],
32
+ "description": "Personal Finance Management - PARTNERS feature layer",
33
+ "keywords": [
34
+ "pfm",
35
+ "finance",
36
+ "partners",
37
+ "feature",
38
+ "react",
39
+ "typescript"
40
+ ],
41
+ "author": "Lenny Miller",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/lennylmiller/pfm-research",
46
+ "directory": "packages/partners/feature"
47
+ },
48
+ "bugs": "https://github.com/lennylmiller/pfm-research/issues",
49
+ "homepage": "https://github.com/lennylmiller/pfm-research#readme",
50
+ "scripts": {
51
+ "test": "vitest run",
52
+ "test:watch": "vitest",
53
+ "test:ui": "vitest --ui",
54
+ "test:coverage": "vitest run --coverage",
55
+ "build": "tsup src/index.ts --format cjs,esm --dts --clean"
56
+ }
57
+ }