Remove brand functionality and update Bambu Lab colors

- Remove brand field from entire codebase (frontend, backend, database)
- Update Bambu Lab colors to official list with correct hex values
- Clean up unused code and type definitions
- Add database migration to drop brand column
- Update search and filters to exclude brand references
- Ensure data persistence across all application layers

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: DaX <noreply@anthropic.com>
This commit is contained in:
DaX
2025-06-23 22:54:47 +02:00
parent 808ca077fa
commit e8f9a6c6e3
10 changed files with 199 additions and 105 deletions

View File

@@ -156,7 +156,7 @@ export default function AdminDashboard() {
<header className="bg-white dark:bg-gray-800 shadow transition-colors">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 lg:py-6">
<div className="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<h1 className="text-2xl lg:text-3xl font-bold text-gray-900 dark:text-white">Admin Dashboard</h1>
<h1 className="text-2xl lg:text-3xl font-bold text-gray-900 dark:text-white">Admin</h1>
<div className="flex flex-wrap gap-2 sm:gap-4 w-full sm:w-auto">
{!showAddForm && !editingFilament && (
<button
@@ -335,7 +335,6 @@ function FilamentForm({
onCancel: () => void
}) {
const [formData, setFormData] = useState({
brand: filament.brand || 'Bambu Lab', // Use existing brand or default to Bambu Lab
tip: filament.tip || '',
finish: filament.finish || '',
boja: filament.boja || '',
@@ -380,7 +379,6 @@ function FilamentForm({
// Update form when filament prop changes
useEffect(() => {
setFormData({
brand: filament.brand || '',
tip: filament.tip || '',
finish: filament.finish || '',
boja: filament.boja || '',
@@ -389,7 +387,7 @@ function FilamentForm({
vakum: filament.vakum || '',
otvoreno: filament.otvoreno || '',
kolicina: filament.kolicina || '',
cena: filament.cena || '',
cena: filament.cena || (filament.id ? '' : '3999'), // Default price for new filaments
});
}, [filament]);
@@ -448,9 +446,16 @@ function FilamentForm({
className="custom-select w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
>
<option value="">Izaberi tip</option>
<option value="PLA">PLA</option>
<option value="PETG">PETG</option>
<option value="ABS">ABS</option>
<option value="ASA">ASA</option>
<option value="PA6">PA6</option>
<option value="PAHT">PAHT</option>
<option value="PC">PC</option>
<option value="PET">PET</option>
<option value="PETG">PETG</option>
<option value="PLA">PLA</option>
<option value="PPA">PPA</option>
<option value="PPS">PPS</option>
<option value="TPU">TPU</option>
</select>
</div>
@@ -465,13 +470,26 @@ function FilamentForm({
className="custom-select w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
>
<option value="">Izaberi finish</option>
<option value="85A">85A</option>
<option value="90A">90A</option>
<option value="95A HF">95A HF</option>
<option value="Aero">Aero</option>
<option value="Basic">Basic</option>
<option value="Matte">Matte</option>
<option value="Silk">Silk</option>
<option value="Metal">Metal</option>
<option value="Sparkle">Sparkle</option>
<option value="Basic Gradient">Basic Gradient</option>
<option value="CF">CF</option>
<option value="FR">FR</option>
<option value="Galaxy">Galaxy</option>
<option value="GF">GF</option>
<option value="Glow">Glow</option>
<option value="Transparent">Transparent</option>
<option value="HF">HF</option>
<option value="Marble">Marble</option>
<option value="Matte">Matte</option>
<option value="Metal">Metal</option>
<option value="Silk Multi-Color">Silk Multi-Color</option>
<option value="Silk+">Silk+</option>
<option value="Sparkle">Sparkle</option>
<option value="Translucent">Translucent</option>
<option value="Wood">Wood</option>
</select>
</div>
@@ -484,12 +502,10 @@ function FilamentForm({
const selectedColorName = e.target.value;
let hexValue = formData.bojaHex;
// Only use Bambu Lab colors if BambuLab brand is selected
if (formData.brand === 'Bambu Lab') {
const bambuHex = getColorHex(selectedColorName);
if (bambuHex !== "#000000") {
hexValue = bambuHex;
}
// Use Bambu Lab colors
const bambuHex = getColorHex(selectedColorName);
if (bambuHex !== "#000000") {
hexValue = bambuHex;
}
// Check available colors from database
@@ -508,8 +524,8 @@ function FilamentForm({
className="custom-select w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
>
<option value="">Izaberite boju</option>
{/* Show Bambu Lab colors only when BambuLab brand is selected */}
{formData.brand === 'Bambu Lab' && formData.finish && colorsByFinish[formData.finish as keyof typeof colorsByFinish] && (
{/* Show Bambu Lab colors based on finish */}
{formData.finish && colorsByFinish[formData.finish as keyof typeof colorsByFinish] && (
<optgroup label={`Bambu Lab ${formData.finish} boje`}>
{colorsByFinish[formData.finish as keyof typeof colorsByFinish].map(colorName => (
<option key={`bambu-${colorName}`} value={colorName}>
@@ -520,7 +536,7 @@ function FilamentForm({
)}
{/* Show all available colors from database */}
{availableColors.length > 0 && (
<optgroup label={formData.brand === 'Bambu Lab' ? 'Ostale boje' : 'Dostupne boje'}>
<optgroup label='Ostale boje'>
{availableColors.map(color => (
<option key={color.id} value={color.name}>
{color.name}
@@ -542,7 +558,7 @@ function FilamentForm({
name="bojaHex"
value={formData.bojaHex || '#000000'}
onChange={handleChange}
disabled={!!(formData.brand === 'Bambu Lab' && formData.boja && formData.boja !== 'custom' && getColorHex(formData.boja) !== "#000000")}
disabled={!!(formData.boja && formData.boja !== 'custom' && getColorHex(formData.boja) !== "#000000")}
className="w-full h-10 px-1 py-1 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
/>
{formData.bojaHex && (
@@ -565,22 +581,20 @@ function FilamentForm({
/>
</div>
{/* Cena and Checkboxes on same line */}
<div className="md:col-span-2 grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">Cena</label>
<input
type="text"
name="cena"
value={formData.cena}
onChange={handleChange}
placeholder="npr. 2500"
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</div>
{/* Checkboxes grouped together horizontally */}
<div className="flex items-end gap-6">
<div>
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">Cena</label>
<input
type="text"
name="cena"
value={formData.cena}
onChange={handleChange}
placeholder="npr. 2500"
className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</div>
{/* Checkboxes grouped together horizontally */}
<div className="md:col-span-2 flex items-end gap-6">
<label className="flex items-center space-x-2 text-sm font-medium text-gray-700 dark:text-gray-300 cursor-pointer">
<input
type="checkbox"
@@ -613,7 +627,6 @@ function FilamentForm({
/>
<span>Otvoreno</span>
</label>
</div>
</div>
<div className="md:col-span-2 flex justify-end gap-4 mt-4">