F

fultonrobert83

@fultonrobert83

free
Joined 27 days ago
Snippets

3

Collections

1

Saved

1

Stars

0

Forks

0

Followers

0

Public Snippets

0 forks0 stars
Cloned from:@ayopelumi2014

A simple React counter component

function TestComponent() {
  const [count, setCount] = React.useState(0);
  
  return (
    <div>
      <h2>Counter: {count}</h2>
      <button onClick={() => setCount(c => c + 1)}>
        Increment
      </button>
      <p>Click the button to test interactivity</p>
    </div>
  );
}

For formatting numbers into comma styles numbers

export function numberFormat(number:number | string){
    let convertedNumber:number = Number(number)
     convertedNumber:number = convertedNumber.toFixed(2)
    const stringNumber = String(number)
    return stringNumber.length > 0 ? new Intl.NumberFormat("en-US").format(convertedNumber): stringNumber
}

console.log(numberFormat(100000))
Cloned from:@ayopelumi2014

Integrating the react use

import { useState, useCallback } from 'react';
import { useRouter } from 'next/navigation';
import { toast } from 'sonner';
import { createClientComponentClient } from '@supabase/auth-helpers-nextjs';
import { createSnippet, getSnippetById, updateSnippet } from '@/lib/actions/snippets.actions';
import type { Snippet } from '@/types/snippets';

export const useSnippetEditor = (id?: string) => {
  const isNew = id === 'new' || !id;
  const router = useRouter();
  const supabase = createClientComponentClient();

  const [state, setState] = useState({
    title: '',
    description: '',
    code: '',
    tags: '',
    isPremium: false,
    isLoading: !isNew,
    isRunning: false,
  });

  const fetchSnippet = useCallback(async () => {
    if (isNew || !id) return;

    try {
      setState(prev => ({ ...prev, isLoading: true }));
      const { snippet } = await getSnippetById(id);

      if (snippet) {
        setState({
          title: snippet.title || '',
          description: snippet.description || '',
          code: snippet.code || '',
          tags: snippet.tags?.join(', ') || '',
          isPremium: snippet.isPremium || false,
          isLoading: false,
          isRunning: false,
        });
        return snippet;
      }
    } catch (error) {
      console.error('Failed to fetch snippet:', error);
      toast.error('Failed to load snippet');
    } finally {
      setState(prev => ({ ...prev, isLoading: false }));
    }
  }, [id, isNew]);

  const handleSave = useCallback(
    async (editorCode: string, language: string) => {
      try {
        setState(prev => ({ ...prev, isRunning: true }));

        const { title, description, tags, isPremium } = state;

        if (!title.trim()) {
          toast.error('Title is required');
          return;
        }
        if (!description.trim()) {
          toast.error('Description is required');
          return;
        }
        if (!editorCode.trim()) {
          toast.error('Code is required');
          return;
        }

        const { data: { session } } = await supabase.auth.getSession();
        if (!session) {
          toast.error('You must be logged in to save snippets');
          return;
        }

        const processedTags = tags
          .split(',')
          .map(tag => tag.trim())
          .filter(tag => tag.length > 0);

        const snippetData = {
          title: title.trim(),
          description: description.trim(),
          code: editorCode,
          language,
          isPublic: !isPremium,
          isPremium,
          tags: processedTags,
          status: 'ACTIVE' as const,
        };

        if (isNew) {
          const { data, error } = await createSnippet(snippetData);
          if (error || !data) throw error || new Error('No data returned');
          toast.success('Snippet created successfully');
          router.push(`/dashboard/snippets/${data[0].id}`);
        } else {
          const { snippet, error } = await updateSnippet(id, snippetData);
          if (error) throw error;
          toast.success('Snippet updated successfully');
          router.push(`/dashboard/snippets/${snippet.id}`);
        }
      } catch (error) {
        console.error('Save error:', error);
        toast.error('Failed to save snippet');
      } finally {
        setState(prev => ({ ...prev, isRunning: false }));
      }
    },
    [state, id, isNew, router, supabase.auth]
  );

  const handleChange = useCallback((field: keyof typeof state, value: any) => {
    setState(prev => ({ ...prev, [field]: value }));
  }, []);

  return {
    ...state,
    isNew,
    fetchSnippet,
    handleSave,
    handleChange,
  };
};
reactusenew hook+1