@haroonwaves/blog-kit-react 1.2.9 → 1.3.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/dist/index.cjs +25 -7
- package/dist/index.js +26 -8
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -306,19 +306,37 @@ function BlogPlaceholder({ count = 3, className = "" }) {
|
|
|
306
306
|
}
|
|
307
307
|
|
|
308
308
|
// src/hooks/useBlogs.ts
|
|
309
|
+
var import_react4 = require("react");
|
|
310
|
+
|
|
311
|
+
// src/hooks/useDebounce.ts
|
|
309
312
|
var import_react3 = require("react");
|
|
313
|
+
function useDebounce(value, delay) {
|
|
314
|
+
const [debouncedValue, setDebouncedValue] = (0, import_react3.useState)(value);
|
|
315
|
+
(0, import_react3.useEffect)(() => {
|
|
316
|
+
const timer = setTimeout(() => {
|
|
317
|
+
setDebouncedValue(value);
|
|
318
|
+
}, delay);
|
|
319
|
+
return () => {
|
|
320
|
+
clearTimeout(timer);
|
|
321
|
+
};
|
|
322
|
+
}, [value, delay]);
|
|
323
|
+
return debouncedValue;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// src/hooks/useBlogs.ts
|
|
310
327
|
function useBlogs(blogsMeta) {
|
|
311
|
-
const [filteredBlogs, setFilteredBlogs] = (0,
|
|
312
|
-
const [searchTerm, setSearchTerm] = (0,
|
|
313
|
-
const [selectedCategory, setSelectedCategory] = (0,
|
|
328
|
+
const [filteredBlogs, setFilteredBlogs] = (0, import_react4.useState)(blogsMeta);
|
|
329
|
+
const [searchTerm, setSearchTerm] = (0, import_react4.useState)("");
|
|
330
|
+
const [selectedCategory, setSelectedCategory] = (0, import_react4.useState)(null);
|
|
331
|
+
const debouncedSearchTerm = useDebounce(searchTerm, 500);
|
|
314
332
|
const getBlogCategories = (blog) => {
|
|
315
333
|
return blog.categories ?? [];
|
|
316
334
|
};
|
|
317
|
-
(0,
|
|
335
|
+
(0, import_react4.useEffect)(() => {
|
|
318
336
|
let filtered = blogsMeta;
|
|
319
|
-
if (
|
|
337
|
+
if (debouncedSearchTerm) {
|
|
320
338
|
filtered = filtered.filter(
|
|
321
|
-
(blog) => blog.title.toLowerCase().includes(
|
|
339
|
+
(blog) => blog.title.toLowerCase().includes(debouncedSearchTerm.toLowerCase()) || blog.description.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
|
|
322
340
|
);
|
|
323
341
|
}
|
|
324
342
|
if (selectedCategory) {
|
|
@@ -328,7 +346,7 @@ function useBlogs(blogsMeta) {
|
|
|
328
346
|
});
|
|
329
347
|
}
|
|
330
348
|
setFilteredBlogs(filtered);
|
|
331
|
-
}, [blogsMeta,
|
|
349
|
+
}, [blogsMeta, debouncedSearchTerm, selectedCategory]);
|
|
332
350
|
const categories = Array.from(new Set(blogsMeta.flatMap((blog) => getBlogCategories(blog))));
|
|
333
351
|
return {
|
|
334
352
|
metadata: filteredBlogs,
|
package/dist/index.js
CHANGED
|
@@ -266,19 +266,37 @@ function BlogPlaceholder({ count = 3, className = "" }) {
|
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
// src/hooks/useBlogs.ts
|
|
269
|
-
import { useState, useEffect } from "react";
|
|
269
|
+
import { useState as useState2, useEffect as useEffect2 } from "react";
|
|
270
|
+
|
|
271
|
+
// src/hooks/useDebounce.ts
|
|
272
|
+
import { useEffect, useState } from "react";
|
|
273
|
+
function useDebounce(value, delay) {
|
|
274
|
+
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
275
|
+
useEffect(() => {
|
|
276
|
+
const timer = setTimeout(() => {
|
|
277
|
+
setDebouncedValue(value);
|
|
278
|
+
}, delay);
|
|
279
|
+
return () => {
|
|
280
|
+
clearTimeout(timer);
|
|
281
|
+
};
|
|
282
|
+
}, [value, delay]);
|
|
283
|
+
return debouncedValue;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// src/hooks/useBlogs.ts
|
|
270
287
|
function useBlogs(blogsMeta) {
|
|
271
|
-
const [filteredBlogs, setFilteredBlogs] =
|
|
272
|
-
const [searchTerm, setSearchTerm] =
|
|
273
|
-
const [selectedCategory, setSelectedCategory] =
|
|
288
|
+
const [filteredBlogs, setFilteredBlogs] = useState2(blogsMeta);
|
|
289
|
+
const [searchTerm, setSearchTerm] = useState2("");
|
|
290
|
+
const [selectedCategory, setSelectedCategory] = useState2(null);
|
|
291
|
+
const debouncedSearchTerm = useDebounce(searchTerm, 500);
|
|
274
292
|
const getBlogCategories = (blog) => {
|
|
275
293
|
return blog.categories ?? [];
|
|
276
294
|
};
|
|
277
|
-
|
|
295
|
+
useEffect2(() => {
|
|
278
296
|
let filtered = blogsMeta;
|
|
279
|
-
if (
|
|
297
|
+
if (debouncedSearchTerm) {
|
|
280
298
|
filtered = filtered.filter(
|
|
281
|
-
(blog) => blog.title.toLowerCase().includes(
|
|
299
|
+
(blog) => blog.title.toLowerCase().includes(debouncedSearchTerm.toLowerCase()) || blog.description.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
|
|
282
300
|
);
|
|
283
301
|
}
|
|
284
302
|
if (selectedCategory) {
|
|
@@ -288,7 +306,7 @@ function useBlogs(blogsMeta) {
|
|
|
288
306
|
});
|
|
289
307
|
}
|
|
290
308
|
setFilteredBlogs(filtered);
|
|
291
|
-
}, [blogsMeta,
|
|
309
|
+
}, [blogsMeta, debouncedSearchTerm, selectedCategory]);
|
|
292
310
|
const categories = Array.from(new Set(blogsMeta.flatMap((blog) => getBlogCategories(blog))));
|
|
293
311
|
return {
|
|
294
312
|
metadata: filteredBlogs,
|