@marvalt/shcoder 0.1.1 → 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.
@@ -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;AAyBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,mBAAmB;;;;EAsGpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;;;;EAwE5C"}
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
@@ -37,6 +37,42 @@ function getApiUrl$1() {
37
37
  }
38
38
  // Initialize API URL
39
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
+ }
40
76
  /**
41
77
  * Hook to fetch members based on shortcode attributes
42
78
  */
@@ -45,15 +81,39 @@ function useMembers(attrs) {
45
81
  const [loading, setLoading] = require$$0.useState(true);
46
82
  const [error, setError] = require$$0.useState(null);
47
83
  require$$0.useEffect(() => {
48
- if (!apiUrl$1) {
49
- setError(new Error('WordPress API URL not configured'));
50
- setLoading(false);
51
- return;
52
- }
53
84
  async function fetchMembers() {
54
85
  try {
55
86
  setLoading(true);
56
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
+ }
57
117
  // Build query params from shortcode attributes
58
118
  const params = {
59
119
  per_page: (attrs.limit ? parseInt(attrs.limit, 10) : 100).toString(),
@@ -86,33 +146,8 @@ function useMembers(attrs) {
86
146
  const processed = {
87
147
  ...member,
88
148
  member_meta: member.member_meta || {},
149
+ featured_image_urls: extractFeaturedImage(member),
89
150
  };
90
- // Extract featured image from _embedded
91
- if (member._embedded && member._embedded['wp:featuredmedia'] && member._embedded['wp:featuredmedia'][0]) {
92
- const featuredMedia = member._embedded['wp:featuredmedia'][0];
93
- processed.featured_image_urls = {
94
- thumbnail: featuredMedia.media_details?.sizes?.thumbnail ? {
95
- url: featuredMedia.media_details.sizes.thumbnail.source_url,
96
- width: featuredMedia.media_details.sizes.thumbnail.width,
97
- height: featuredMedia.media_details.sizes.thumbnail.height,
98
- } : undefined,
99
- medium: featuredMedia.media_details?.sizes?.medium ? {
100
- url: featuredMedia.media_details.sizes.medium.source_url,
101
- width: featuredMedia.media_details.sizes.medium.width,
102
- height: featuredMedia.media_details.sizes.medium.height,
103
- } : undefined,
104
- large: featuredMedia.media_details?.sizes?.large ? {
105
- url: featuredMedia.media_details.sizes.large.source_url,
106
- width: featuredMedia.media_details.sizes.large.width,
107
- height: featuredMedia.media_details.sizes.large.height,
108
- } : undefined,
109
- full: {
110
- url: featuredMedia.source_url || featuredMedia.media_details?.sizes?.full?.source_url || '',
111
- width: featuredMedia.media_details?.width || 0,
112
- height: featuredMedia.media_details?.height || 0,
113
- },
114
- };
115
- }
116
151
  return processed;
117
152
  });
118
153
  setMembers(processedMembers);
@@ -137,7 +172,7 @@ function useMember(id) {
137
172
  const [loading, setLoading] = require$$0.useState(true);
138
173
  const [error, setError] = require$$0.useState(null);
139
174
  require$$0.useEffect(() => {
140
- if (!apiUrl$1 || !id) {
175
+ if (!id) {
141
176
  setLoading(false);
142
177
  return;
143
178
  }
@@ -145,6 +180,31 @@ function useMember(id) {
145
180
  try {
146
181
  setLoading(true);
147
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
+ }
148
208
  const response = await fetch(`${apiUrl$1}/wp/v2/member/${id}?_embed=true`);
149
209
  if (!response.ok) {
150
210
  throw new Error(`Failed to fetch member: ${response.statusText}`);
@@ -154,33 +214,8 @@ function useMember(id) {
154
214
  const processed = {
155
215
  ...data,
156
216
  member_meta: data.member_meta || {},
217
+ featured_image_urls: extractFeaturedImage(data),
157
218
  };
158
- // Extract featured image from _embedded
159
- if (data._embedded && data._embedded['wp:featuredmedia'] && data._embedded['wp:featuredmedia'][0]) {
160
- const featuredMedia = data._embedded['wp:featuredmedia'][0];
161
- processed.featured_image_urls = {
162
- thumbnail: featuredMedia.media_details?.sizes?.thumbnail ? {
163
- url: featuredMedia.media_details.sizes.thumbnail.source_url,
164
- width: featuredMedia.media_details.sizes.thumbnail.width,
165
- height: featuredMedia.media_details.sizes.thumbnail.height,
166
- } : undefined,
167
- medium: featuredMedia.media_details?.sizes?.medium ? {
168
- url: featuredMedia.media_details.sizes.medium.source_url,
169
- width: featuredMedia.media_details.sizes.medium.width,
170
- height: featuredMedia.media_details.sizes.medium.height,
171
- } : undefined,
172
- large: featuredMedia.media_details?.sizes?.large ? {
173
- url: featuredMedia.media_details.sizes.large.source_url,
174
- width: featuredMedia.media_details.sizes.large.width,
175
- height: featuredMedia.media_details.sizes.large.height,
176
- } : undefined,
177
- full: {
178
- url: featuredMedia.source_url || featuredMedia.media_details?.sizes?.full?.source_url || '',
179
- width: featuredMedia.media_details?.width || 0,
180
- height: featuredMedia.media_details?.height || 0,
181
- },
182
- };
183
- }
184
219
  setMember(processed);
185
220
  }
186
221
  catch (err) {
@@ -1886,6 +1921,7 @@ exports.MemberSlideshow = MemberSlideshow;
1886
1921
  exports.TestimonialCard = TestimonialCard;
1887
1922
  exports.TestimonialCardsGrid = TestimonialCardsGrid;
1888
1923
  exports.TestimonialSlideshow = TestimonialSlideshow;
1924
+ exports.setStaticDataProvider = setStaticDataProvider;
1889
1925
  exports.setWordPressApiUrl = setWordPressApiUrl;
1890
1926
  exports.useMember = useMember;
1891
1927
  exports.useMembers = useMembers;