// static/admin/js/vendor-product-create.js /** * Admin vendor product create page logic * Create new vendor product entries */ const adminVendorProductCreateLog = window.LogConfig.loggers.adminVendorProductCreate || window.LogConfig.createLogger('adminVendorProductCreate', false); adminVendorProductCreateLog.info('Loading...'); function adminVendorProductCreate() { adminVendorProductCreateLog.info('adminVendorProductCreate() called'); return { // Inherit base layout state ...data(), // Set page identifier currentPage: 'vendor-products', // Loading states saving: false, // Tom Select instance vendorSelectInstance: null, // Form data form: { vendor_id: null, title: '', brand: '', vendor_sku: '', gtin: '', price: null, currency: 'EUR', availability: '', is_active: true, is_featured: false, is_digital: false, description: '' }, async init() { adminVendorProductCreateLog.info('Vendor Product Create init() called'); // Guard against multiple initialization if (window._adminVendorProductCreateInitialized) { adminVendorProductCreateLog.warn('Already initialized, skipping'); return; } window._adminVendorProductCreateInitialized = true; // Initialize Tom Select this.initVendorSelect(); adminVendorProductCreateLog.info('Vendor Product Create initialization complete'); }, /** * Initialize Tom Select for vendor autocomplete */ initVendorSelect() { const selectEl = this.$refs.vendorSelect; if (!selectEl) { adminVendorProductCreateLog.warn('Vendor select element not found'); return; } // Wait for Tom Select to be available if (typeof TomSelect === 'undefined') { adminVendorProductCreateLog.warn('TomSelect not loaded, retrying in 100ms'); setTimeout(() => this.initVendorSelect(), 100); return; } this.vendorSelectInstance = new TomSelect(selectEl, { valueField: 'id', labelField: 'name', searchField: ['name', 'vendor_code'], placeholder: 'Search vendor...', load: async (query, callback) => { try { const response = await apiClient.get('/admin/vendors', { search: query, limit: 50 }); callback(response.vendors || []); } catch (error) { adminVendorProductCreateLog.error('Failed to search vendors:', error); callback([]); } }, render: { option: (data, escape) => { return `