@marvalt/shcoder 0.1.0 → 0.1.2
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/components/MemberCard.d.ts +1 -1
- package/dist/components/MemberCard.d.ts.map +1 -1
- package/dist/components/TestimonialCard.d.ts +1 -1
- package/dist/components/TestimonialCard.d.ts.map +1 -1
- package/dist/hooks/useMembers.d.ts +13 -0
- package/dist/hooks/useMembers.d.ts.map +1 -1
- package/dist/index.cjs +105 -62
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +105 -63
- package/dist/index.esm.js.map +1 -1
- package/package.json +12 -2
|
@@ -11,7 +11,7 @@ export interface MemberCardProps extends ShortcodeAttributes {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* MemberCard component - displays a single member profile
|
|
14
|
-
* Usage: [member_card id="123"]
|
|
14
|
+
* Usage: [member_card id="123"] or [member_card] with ?member_id=123 in URL
|
|
15
15
|
*/
|
|
16
16
|
export declare const MemberCard: React.FC<MemberCardProps>;
|
|
17
17
|
//# sourceMappingURL=MemberCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemberCard.d.ts","sourceRoot":"","sources":["../../src/components/MemberCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MemberCard.d.ts","sourceRoot":"","sources":["../../src/components/MemberCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA6ChD,CAAC"}
|
|
@@ -11,7 +11,7 @@ export interface TestimonialCardProps extends ShortcodeAttributes {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* TestimonialCard component - displays a single testimonial
|
|
14
|
-
* Usage: [testimonial_card id="123"]
|
|
14
|
+
* Usage: [testimonial_card id="123"] or [testimonial_card] with ?testimonial_id=123 in URL
|
|
15
15
|
*/
|
|
16
16
|
export declare const TestimonialCard: React.FC<TestimonialCardProps>;
|
|
17
17
|
//# sourceMappingURL=TestimonialCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestimonialCard.d.ts","sourceRoot":"","sources":["../../src/components/TestimonialCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TestimonialCard.d.ts","sourceRoot":"","sources":["../../src/components/TestimonialCard.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAyC1D,CAAC"}
|
|
@@ -7,6 +7,18 @@
|
|
|
7
7
|
import type { Member } from '../types/member';
|
|
8
8
|
import type { ShortcodeAttributes } from '../types/shortcode';
|
|
9
9
|
export declare function setWordPressApiUrl(url: string): void;
|
|
10
|
+
type StaticDataProvider = () => {
|
|
11
|
+
members: any[];
|
|
12
|
+
getMemberById: (id: string | number) => any | null;
|
|
13
|
+
filterMembers: (filters: {
|
|
14
|
+
category?: string;
|
|
15
|
+
role?: string;
|
|
16
|
+
limit?: number;
|
|
17
|
+
orderby?: string;
|
|
18
|
+
order?: string;
|
|
19
|
+
}) => any[];
|
|
20
|
+
};
|
|
21
|
+
export declare function setStaticDataProvider(provider: StaticDataProvider): void;
|
|
10
22
|
/**
|
|
11
23
|
* Hook to fetch members based on shortcode attributes
|
|
12
24
|
*/
|
|
@@ -23,4 +35,5 @@ export declare function useMember(id: string | number): {
|
|
|
23
35
|
loading: boolean;
|
|
24
36
|
error: Error | null;
|
|
25
37
|
};
|
|
38
|
+
export {};
|
|
26
39
|
//# sourceMappingURL=useMembers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMembers.d.ts","sourceRoot":"","sources":["../../src/hooks/useMembers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAS9D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,QAE7C;
|
|
1
|
+
{"version":3,"file":"useMembers.d.ts","sourceRoot":"","sources":["../../src/hooks/useMembers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAS9D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,QAE7C;AA0BD,KAAK,kBAAkB,GAAG,MAAM;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC;IACnD,aAAa,EAAE,CAAC,OAAO,EAAE;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,GAAG,EAAE,CAAC;CACb,CAAC;AAIF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,QAEjE;AAqCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,mBAAmB;;;;EAwGpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;;;;EA0E5C"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var require$$0 = require('react');
|
|
4
|
+
var reactRouterDom = require('react-router-dom');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* @license GPL-3.0-or-later
|
|
@@ -36,6 +37,42 @@ function getApiUrl$1() {
|
|
|
36
37
|
}
|
|
37
38
|
// Initialize API URL
|
|
38
39
|
apiUrl$1 = getApiUrl$1();
|
|
40
|
+
let staticDataProvider = null;
|
|
41
|
+
function setStaticDataProvider(provider) {
|
|
42
|
+
staticDataProvider = provider;
|
|
43
|
+
}
|
|
44
|
+
// Helper function to extract featured image from member data
|
|
45
|
+
function extractFeaturedImage(member) {
|
|
46
|
+
if (member.featured_image_urls) {
|
|
47
|
+
return member.featured_image_urls;
|
|
48
|
+
}
|
|
49
|
+
if (member._embedded?.['wp:featuredmedia']?.[0]) {
|
|
50
|
+
const featuredMedia = member._embedded['wp:featuredmedia'][0];
|
|
51
|
+
return {
|
|
52
|
+
thumbnail: featuredMedia.media_details?.sizes?.thumbnail ? {
|
|
53
|
+
url: featuredMedia.media_details.sizes.thumbnail.source_url,
|
|
54
|
+
width: featuredMedia.media_details.sizes.thumbnail.width,
|
|
55
|
+
height: featuredMedia.media_details.sizes.thumbnail.height,
|
|
56
|
+
} : undefined,
|
|
57
|
+
medium: featuredMedia.media_details?.sizes?.medium ? {
|
|
58
|
+
url: featuredMedia.media_details.sizes.medium.source_url,
|
|
59
|
+
width: featuredMedia.media_details.sizes.medium.width,
|
|
60
|
+
height: featuredMedia.media_details.sizes.medium.height,
|
|
61
|
+
} : undefined,
|
|
62
|
+
large: featuredMedia.media_details?.sizes?.large ? {
|
|
63
|
+
url: featuredMedia.media_details.sizes.large.source_url,
|
|
64
|
+
width: featuredMedia.media_details.sizes.large.width,
|
|
65
|
+
height: featuredMedia.media_details.sizes.large.height,
|
|
66
|
+
} : undefined,
|
|
67
|
+
full: {
|
|
68
|
+
url: featuredMedia.source_url || featuredMedia.media_details?.sizes?.full?.source_url || '',
|
|
69
|
+
width: featuredMedia.media_details?.width || 0,
|
|
70
|
+
height: featuredMedia.media_details?.height || 0,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
39
76
|
/**
|
|
40
77
|
* Hook to fetch members based on shortcode attributes
|
|
41
78
|
*/
|
|
@@ -44,15 +81,39 @@ function useMembers(attrs) {
|
|
|
44
81
|
const [loading, setLoading] = require$$0.useState(true);
|
|
45
82
|
const [error, setError] = require$$0.useState(null);
|
|
46
83
|
require$$0.useEffect(() => {
|
|
47
|
-
if (!apiUrl$1) {
|
|
48
|
-
setError(new Error('WordPress API URL not configured'));
|
|
49
|
-
setLoading(false);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
84
|
async function fetchMembers() {
|
|
53
85
|
try {
|
|
54
86
|
setLoading(true);
|
|
55
87
|
setError(null);
|
|
88
|
+
// Use static data if available (preferred method)
|
|
89
|
+
if (staticDataProvider) {
|
|
90
|
+
const provider = staticDataProvider();
|
|
91
|
+
const filtered = provider.filterMembers({
|
|
92
|
+
category: attrs.tax || attrs.category,
|
|
93
|
+
role: attrs.role,
|
|
94
|
+
limit: attrs.limit ? parseInt(attrs.limit, 10) : undefined,
|
|
95
|
+
orderby: attrs.orderby || 'date',
|
|
96
|
+
order: attrs.order || 'desc',
|
|
97
|
+
});
|
|
98
|
+
// Process members to match Member interface
|
|
99
|
+
const processedMembers = filtered.map((member) => {
|
|
100
|
+
const processed = {
|
|
101
|
+
...member,
|
|
102
|
+
member_meta: member.member_meta || {},
|
|
103
|
+
featured_image_urls: extractFeaturedImage(member),
|
|
104
|
+
};
|
|
105
|
+
return processed;
|
|
106
|
+
});
|
|
107
|
+
setMembers(processedMembers);
|
|
108
|
+
setLoading(false);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Fallback to API (should not happen in production with static data)
|
|
112
|
+
if (!apiUrl$1) {
|
|
113
|
+
setError(new Error('WordPress API URL not configured and no static data provider available'));
|
|
114
|
+
setLoading(false);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
56
117
|
// Build query params from shortcode attributes
|
|
57
118
|
const params = {
|
|
58
119
|
per_page: (attrs.limit ? parseInt(attrs.limit, 10) : 100).toString(),
|
|
@@ -85,33 +146,8 @@ function useMembers(attrs) {
|
|
|
85
146
|
const processed = {
|
|
86
147
|
...member,
|
|
87
148
|
member_meta: member.member_meta || {},
|
|
149
|
+
featured_image_urls: extractFeaturedImage(member),
|
|
88
150
|
};
|
|
89
|
-
// Extract featured image from _embedded
|
|
90
|
-
if (member._embedded && member._embedded['wp:featuredmedia'] && member._embedded['wp:featuredmedia'][0]) {
|
|
91
|
-
const featuredMedia = member._embedded['wp:featuredmedia'][0];
|
|
92
|
-
processed.featured_image_urls = {
|
|
93
|
-
thumbnail: featuredMedia.media_details?.sizes?.thumbnail ? {
|
|
94
|
-
url: featuredMedia.media_details.sizes.thumbnail.source_url,
|
|
95
|
-
width: featuredMedia.media_details.sizes.thumbnail.width,
|
|
96
|
-
height: featuredMedia.media_details.sizes.thumbnail.height,
|
|
97
|
-
} : undefined,
|
|
98
|
-
medium: featuredMedia.media_details?.sizes?.medium ? {
|
|
99
|
-
url: featuredMedia.media_details.sizes.medium.source_url,
|
|
100
|
-
width: featuredMedia.media_details.sizes.medium.width,
|
|
101
|
-
height: featuredMedia.media_details.sizes.medium.height,
|
|
102
|
-
} : undefined,
|
|
103
|
-
large: featuredMedia.media_details?.sizes?.large ? {
|
|
104
|
-
url: featuredMedia.media_details.sizes.large.source_url,
|
|
105
|
-
width: featuredMedia.media_details.sizes.large.width,
|
|
106
|
-
height: featuredMedia.media_details.sizes.large.height,
|
|
107
|
-
} : undefined,
|
|
108
|
-
full: {
|
|
109
|
-
url: featuredMedia.source_url || featuredMedia.media_details?.sizes?.full?.source_url || '',
|
|
110
|
-
width: featuredMedia.media_details?.width || 0,
|
|
111
|
-
height: featuredMedia.media_details?.height || 0,
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
151
|
return processed;
|
|
116
152
|
});
|
|
117
153
|
setMembers(processedMembers);
|
|
@@ -136,7 +172,7 @@ function useMember(id) {
|
|
|
136
172
|
const [loading, setLoading] = require$$0.useState(true);
|
|
137
173
|
const [error, setError] = require$$0.useState(null);
|
|
138
174
|
require$$0.useEffect(() => {
|
|
139
|
-
if (!
|
|
175
|
+
if (!id) {
|
|
140
176
|
setLoading(false);
|
|
141
177
|
return;
|
|
142
178
|
}
|
|
@@ -144,6 +180,31 @@ function useMember(id) {
|
|
|
144
180
|
try {
|
|
145
181
|
setLoading(true);
|
|
146
182
|
setError(null);
|
|
183
|
+
// Use static data if available (preferred method)
|
|
184
|
+
if (staticDataProvider) {
|
|
185
|
+
const provider = staticDataProvider();
|
|
186
|
+
const found = provider.getMemberById(id);
|
|
187
|
+
if (found) {
|
|
188
|
+
// Process member to match Member interface
|
|
189
|
+
const processed = {
|
|
190
|
+
...found,
|
|
191
|
+
member_meta: found.member_meta || {},
|
|
192
|
+
featured_image_urls: extractFeaturedImage(found),
|
|
193
|
+
};
|
|
194
|
+
setMember(processed);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
setMember(null);
|
|
198
|
+
}
|
|
199
|
+
setLoading(false);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Fallback to API (should not happen in production with static data)
|
|
203
|
+
if (!apiUrl$1) {
|
|
204
|
+
setError(new Error('WordPress API URL not configured and no static data provider available'));
|
|
205
|
+
setLoading(false);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
147
208
|
const response = await fetch(`${apiUrl$1}/wp/v2/member/${id}?_embed=true`);
|
|
148
209
|
if (!response.ok) {
|
|
149
210
|
throw new Error(`Failed to fetch member: ${response.statusText}`);
|
|
@@ -153,33 +214,8 @@ function useMember(id) {
|
|
|
153
214
|
const processed = {
|
|
154
215
|
...data,
|
|
155
216
|
member_meta: data.member_meta || {},
|
|
217
|
+
featured_image_urls: extractFeaturedImage(data),
|
|
156
218
|
};
|
|
157
|
-
// Extract featured image from _embedded
|
|
158
|
-
if (data._embedded && data._embedded['wp:featuredmedia'] && data._embedded['wp:featuredmedia'][0]) {
|
|
159
|
-
const featuredMedia = data._embedded['wp:featuredmedia'][0];
|
|
160
|
-
processed.featured_image_urls = {
|
|
161
|
-
thumbnail: featuredMedia.media_details?.sizes?.thumbnail ? {
|
|
162
|
-
url: featuredMedia.media_details.sizes.thumbnail.source_url,
|
|
163
|
-
width: featuredMedia.media_details.sizes.thumbnail.width,
|
|
164
|
-
height: featuredMedia.media_details.sizes.thumbnail.height,
|
|
165
|
-
} : undefined,
|
|
166
|
-
medium: featuredMedia.media_details?.sizes?.medium ? {
|
|
167
|
-
url: featuredMedia.media_details.sizes.medium.source_url,
|
|
168
|
-
width: featuredMedia.media_details.sizes.medium.width,
|
|
169
|
-
height: featuredMedia.media_details.sizes.medium.height,
|
|
170
|
-
} : undefined,
|
|
171
|
-
large: featuredMedia.media_details?.sizes?.large ? {
|
|
172
|
-
url: featuredMedia.media_details.sizes.large.source_url,
|
|
173
|
-
width: featuredMedia.media_details.sizes.large.width,
|
|
174
|
-
height: featuredMedia.media_details.sizes.large.height,
|
|
175
|
-
} : undefined,
|
|
176
|
-
full: {
|
|
177
|
-
url: featuredMedia.source_url || featuredMedia.media_details?.sizes?.full?.source_url || '',
|
|
178
|
-
width: featuredMedia.media_details?.width || 0,
|
|
179
|
-
height: featuredMedia.media_details?.height || 0,
|
|
180
|
-
},
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
219
|
setMember(processed);
|
|
184
220
|
}
|
|
185
221
|
catch (err) {
|
|
@@ -1687,10 +1723,13 @@ var jsxRuntimeExports = jsxRuntime.exports;
|
|
|
1687
1723
|
|
|
1688
1724
|
/**
|
|
1689
1725
|
* MemberCard component - displays a single member profile
|
|
1690
|
-
* Usage: [member_card id="123"]
|
|
1726
|
+
* Usage: [member_card id="123"] or [member_card] with ?member_id=123 in URL
|
|
1691
1727
|
*/
|
|
1692
1728
|
const MemberCard = ({ id, className = '' }) => {
|
|
1693
|
-
|
|
1729
|
+
// Read from query params as fallback if id not provided in shortcode
|
|
1730
|
+
const [searchParams] = reactRouterDom.useSearchParams();
|
|
1731
|
+
const memberId = id || searchParams.get('member_id') || '';
|
|
1732
|
+
const { member, loading, error } = useMember(memberId);
|
|
1694
1733
|
if (loading) {
|
|
1695
1734
|
return jsxRuntimeExports.jsx("div", { className: `member-card-loading ${className}`, children: "Loading member..." });
|
|
1696
1735
|
}
|
|
@@ -1788,10 +1827,13 @@ const MemberSlideshow = ({ tax, category, role, limit = '5', interval = '5000',
|
|
|
1788
1827
|
|
|
1789
1828
|
/**
|
|
1790
1829
|
* TestimonialCard component - displays a single testimonial
|
|
1791
|
-
* Usage: [testimonial_card id="123"]
|
|
1830
|
+
* Usage: [testimonial_card id="123"] or [testimonial_card] with ?testimonial_id=123 in URL
|
|
1792
1831
|
*/
|
|
1793
1832
|
const TestimonialCard = ({ id, className = '' }) => {
|
|
1794
|
-
|
|
1833
|
+
// Read from query params as fallback if id not provided in shortcode
|
|
1834
|
+
const [searchParams] = reactRouterDom.useSearchParams();
|
|
1835
|
+
const testimonialId = id || searchParams.get('testimonial_id') || '';
|
|
1836
|
+
const { testimonial, loading, error } = useTestimonial(testimonialId);
|
|
1795
1837
|
if (loading) {
|
|
1796
1838
|
return jsxRuntimeExports.jsx("div", { className: `testimonial-card-loading ${className}`, children: "Loading testimonial..." });
|
|
1797
1839
|
}
|
|
@@ -1879,6 +1921,7 @@ exports.MemberSlideshow = MemberSlideshow;
|
|
|
1879
1921
|
exports.TestimonialCard = TestimonialCard;
|
|
1880
1922
|
exports.TestimonialCardsGrid = TestimonialCardsGrid;
|
|
1881
1923
|
exports.TestimonialSlideshow = TestimonialSlideshow;
|
|
1924
|
+
exports.setStaticDataProvider = setStaticDataProvider;
|
|
1882
1925
|
exports.setWordPressApiUrl = setWordPressApiUrl;
|
|
1883
1926
|
exports.useMember = useMember;
|
|
1884
1927
|
exports.useMembers = useMembers;
|