Translate table headers to Serbian (Finish -> Finiš, Spulna -> Špulna, Refill -> Refil)
This commit is contained in:
@@ -28,8 +28,8 @@ describe('UI Features Tests', () => {
|
|||||||
// Check for number inputs for quantities
|
// Check for number inputs for quantities
|
||||||
expect(adminContent).toMatch(/type="number"[\s\S]*?name="refill"/);
|
expect(adminContent).toMatch(/type="number"[\s\S]*?name="refill"/);
|
||||||
expect(adminContent).toMatch(/type="number"[\s\S]*?name="spulna"/);
|
expect(adminContent).toMatch(/type="number"[\s\S]*?name="spulna"/);
|
||||||
expect(adminContent).toContain('Refill');
|
expect(adminContent).toContain('Refil');
|
||||||
expect(adminContent).toContain('Spulna');
|
expect(adminContent).toContain('Špulna');
|
||||||
expect(adminContent).toContain('Ukupna količina');
|
expect(adminContent).toContain('Ukupna količina');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -460,8 +460,8 @@ export default function AdminDashboard() {
|
|||||||
<option value="boja-desc">Sortiraj po: Boja (Z-A)</option>
|
<option value="boja-desc">Sortiraj po: Boja (Z-A)</option>
|
||||||
<option value="tip-asc">Sortiraj po: Tip (A-Z)</option>
|
<option value="tip-asc">Sortiraj po: Tip (A-Z)</option>
|
||||||
<option value="tip-desc">Sortiraj po: Tip (Z-A)</option>
|
<option value="tip-desc">Sortiraj po: Tip (Z-A)</option>
|
||||||
<option value="finish-asc">Sortiraj po: Finish (A-Z)</option>
|
<option value="finish-asc">Sortiraj po: Finiš (A-Z)</option>
|
||||||
<option value="finish-desc">Sortiraj po: Finish (Z-A)</option>
|
<option value="finish-desc">Sortiraj po: Finiš (Z-A)</option>
|
||||||
<option value="created_at-desc">Sortiraj po: Poslednje dodano</option>
|
<option value="created_at-desc">Sortiraj po: Poslednje dodano</option>
|
||||||
<option value="created_at-asc">Sortiraj po: Prvo dodano</option>
|
<option value="created_at-asc">Sortiraj po: Prvo dodano</option>
|
||||||
<option value="updated_at-desc">Sortiraj po: Poslednje ažurirano</option>
|
<option value="updated_at-desc">Sortiraj po: Poslednje ažurirano</option>
|
||||||
@@ -507,16 +507,16 @@ export default function AdminDashboard() {
|
|||||||
Tip {sortField === 'tip' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Tip {sortField === 'tip' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('finish')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
<th onClick={() => handleSort('finish')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
||||||
Finish {sortField === 'finish' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Finiš {sortField === 'finish' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('boja')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
<th onClick={() => handleSort('boja')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
||||||
Boja {sortField === 'boja' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Boja {sortField === 'boja' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('refill')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
<th onClick={() => handleSort('refill')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
||||||
Refill {sortField === 'refill' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Refil {sortField === 'refill' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('spulna')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
<th onClick={() => handleSort('spulna')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
||||||
Spulna {sortField === 'spulna' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Špulna {sortField === 'spulna' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('kolicina')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
<th onClick={() => handleSort('kolicina')} className="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700">
|
||||||
Količina {sortField === 'kolicina' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Količina {sortField === 'kolicina' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
@@ -866,7 +866,7 @@ function FilamentForm({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">Finish</label>
|
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">Finiš</label>
|
||||||
<select
|
<select
|
||||||
name="finish"
|
name="finish"
|
||||||
value={formData.finish}
|
value={formData.finish}
|
||||||
@@ -874,7 +874,7 @@ function FilamentForm({
|
|||||||
required
|
required
|
||||||
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"
|
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="">Izaberi finiš</option>
|
||||||
{(FINISH_OPTIONS_BY_TYPE[formData.tip] || []).map(finish => (
|
{(FINISH_OPTIONS_BY_TYPE[formData.tip] || []).map(finish => (
|
||||||
<option key={finish} value={finish}>{finish}</option>
|
<option key={finish} value={finish}>{finish}</option>
|
||||||
))}
|
))}
|
||||||
@@ -945,7 +945,7 @@ function FilamentForm({
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
||||||
<span className="text-green-600 dark:text-green-400">Cena Refill</span>
|
<span className="text-green-600 dark:text-green-400">Cena Refila</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
@@ -957,8 +957,8 @@ function FilamentForm({
|
|||||||
placeholder="3499"
|
placeholder="3499"
|
||||||
disabled={isSpoolOnly(formData.finish, formData.tip)}
|
disabled={isSpoolOnly(formData.finish, formData.tip)}
|
||||||
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
||||||
isSpoolOnly(formData.finish, formData.tip)
|
isSpoolOnly(formData.finish, formData.tip)
|
||||||
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
||||||
: 'bg-white dark:bg-gray-700'
|
: 'bg-white dark:bg-gray-700'
|
||||||
} text-green-600 dark:text-green-400 font-bold focus:outline-none focus:ring-2 focus:ring-green-500`}
|
} text-green-600 dark:text-green-400 font-bold focus:outline-none focus:ring-2 focus:ring-green-500`}
|
||||||
/>
|
/>
|
||||||
@@ -966,7 +966,7 @@ function FilamentForm({
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
||||||
<span className="text-blue-500 dark:text-blue-400">Cena Spulna</span>
|
<span className="text-blue-500 dark:text-blue-400">Cena Špulne</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
@@ -978,8 +978,8 @@ function FilamentForm({
|
|||||||
placeholder="3999"
|
placeholder="3999"
|
||||||
disabled={isRefillOnly(formData.boja, formData.finish)}
|
disabled={isRefillOnly(formData.boja, formData.finish)}
|
||||||
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
||||||
isRefillOnly(formData.boja, formData.finish)
|
isRefillOnly(formData.boja, formData.finish)
|
||||||
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed text-gray-400'
|
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed text-gray-400'
|
||||||
: 'bg-white dark:bg-gray-700 text-blue-500 dark:text-blue-400 font-bold focus:outline-none focus:ring-2 focus:ring-blue-500'
|
: 'bg-white dark:bg-gray-700 text-blue-500 dark:text-blue-400 font-bold focus:outline-none focus:ring-2 focus:ring-blue-500'
|
||||||
}`}
|
}`}
|
||||||
/>
|
/>
|
||||||
@@ -988,9 +988,9 @@ function FilamentForm({
|
|||||||
{/* Quantity inputs for refill, vakuum, and otvoreno */}
|
{/* Quantity inputs for refill, vakuum, and otvoreno */}
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
||||||
Refill
|
Refil
|
||||||
{isSpoolOnly(formData.finish, formData.tip) && (
|
{isSpoolOnly(formData.finish, formData.tip) && (
|
||||||
<span className="text-xs text-gray-500 dark:text-gray-400 ml-2">(samo spulna postoji)</span>
|
<span className="text-xs text-gray-500 dark:text-gray-400 ml-2">(samo špulna postoji)</span>
|
||||||
)}
|
)}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
@@ -1003,8 +1003,8 @@ function FilamentForm({
|
|||||||
placeholder="0"
|
placeholder="0"
|
||||||
disabled={isSpoolOnly(formData.finish, formData.tip)}
|
disabled={isSpoolOnly(formData.finish, formData.tip)}
|
||||||
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
||||||
isSpoolOnly(formData.finish, formData.tip)
|
isSpoolOnly(formData.finish, formData.tip)
|
||||||
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
||||||
: 'bg-white dark:bg-gray-700'
|
: 'bg-white dark:bg-gray-700'
|
||||||
} text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500`}
|
} text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500`}
|
||||||
/>
|
/>
|
||||||
@@ -1012,7 +1012,7 @@ function FilamentForm({
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
<label className="block text-sm font-medium mb-1 text-gray-700 dark:text-gray-300">
|
||||||
Spulna
|
Špulna
|
||||||
{isRefillOnly(formData.boja, formData.finish, formData.tip) && (
|
{isRefillOnly(formData.boja, formData.finish, formData.tip) && (
|
||||||
<span className="text-xs text-gray-500 dark:text-gray-400 ml-2">(samo refil postoji)</span>
|
<span className="text-xs text-gray-500 dark:text-gray-400 ml-2">(samo refil postoji)</span>
|
||||||
)}
|
)}
|
||||||
@@ -1027,8 +1027,8 @@ function FilamentForm({
|
|||||||
placeholder="0"
|
placeholder="0"
|
||||||
disabled={isRefillOnly(formData.boja, formData.finish, formData.tip)}
|
disabled={isRefillOnly(formData.boja, formData.finish, formData.tip)}
|
||||||
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
className={`w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md ${
|
||||||
isRefillOnly(formData.boja, formData.finish, formData.tip)
|
isRefillOnly(formData.boja, formData.finish, formData.tip)
|
||||||
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
? 'bg-gray-100 dark:bg-gray-600 cursor-not-allowed'
|
||||||
: 'bg-white dark:bg-gray-700'
|
: 'bg-white dark:bg-gray-700'
|
||||||
} text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500`}
|
} text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -157,16 +157,16 @@ const FilamentTableV2: React.FC<FilamentTableV2Props> = ({ filaments }) => {
|
|||||||
Tip {sortField === 'tip' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Tip {sortField === 'tip' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('finish')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
<th onClick={() => handleSort('finish')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
||||||
Finish {sortField === 'finish' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Finiš {sortField === 'finish' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('boja')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
<th onClick={() => handleSort('boja')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
||||||
Boja {sortField === 'boja' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Boja {sortField === 'boja' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('refill')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
<th onClick={() => handleSort('refill')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
||||||
Refill {sortField === 'refill' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Refil {sortField === 'refill' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('spulna')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
<th onClick={() => handleSort('spulna')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
||||||
Spulna {sortField === 'spulna' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Špulna {sortField === 'spulna' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
</th>
|
</th>
|
||||||
<th onClick={() => handleSort('kolicina')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
<th onClick={() => handleSort('kolicina')} className="px-2 sm:px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800">
|
||||||
Količina {sortField === 'kolicina' && (sortOrder === 'asc' ? '↑' : '↓')}
|
Količina {sortField === 'kolicina' && (sortOrder === 'asc' ? '↑' : '↓')}
|
||||||
|
|||||||
Reference in New Issue
Block a user