@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 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, import_react3.useState)(blogsMeta);
312
- const [searchTerm, setSearchTerm] = (0, import_react3.useState)("");
313
- const [selectedCategory, setSelectedCategory] = (0, import_react3.useState)(null);
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, import_react3.useEffect)(() => {
335
+ (0, import_react4.useEffect)(() => {
318
336
  let filtered = blogsMeta;
319
- if (searchTerm) {
337
+ if (debouncedSearchTerm) {
320
338
  filtered = filtered.filter(
321
- (blog) => blog.title.toLowerCase().includes(searchTerm.toLowerCase()) || blog.description.toLowerCase().includes(searchTerm.toLowerCase())
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, searchTerm, selectedCategory]);
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] = useState(blogsMeta);
272
- const [searchTerm, setSearchTerm] = useState("");
273
- const [selectedCategory, setSelectedCategory] = useState(null);
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
- useEffect(() => {
295
+ useEffect2(() => {
278
296
  let filtered = blogsMeta;
279
- if (searchTerm) {
297
+ if (debouncedSearchTerm) {
280
298
  filtered = filtered.filter(
281
- (blog) => blog.title.toLowerCase().includes(searchTerm.toLowerCase()) || blog.description.toLowerCase().includes(searchTerm.toLowerCase())
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, searchTerm, selectedCategory]);
309
+ }, [blogsMeta, debouncedSearchTerm, selectedCategory]);
292
310
  const categories = Array.from(new Set(blogsMeta.flatMap((blog) => getBlogCategories(blog))));
293
311
  return {
294
312
  metadata: filteredBlogs,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haroonwaves/blog-kit-react",
3
- "version": "1.2.9",
3
+ "version": "1.3.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",