Settings:
- GlobalSettings page with tabbed interface
- Replace WPCFTO framework with React components
- Tabs: General, Payment, Pages, Customer
- Multicurrency settings with default currency selector
- AJAX save functionality with status feedback
Product Editor:
- VariationPricingTable - Complete recreation of Vue app
- Multi-currency flat pricing (columns mode)
- Multi-currency expanded mode (inner tables per variation)
- Dynamic rows from attribute repeater (MutationObserver + polling)
- Decimal digits per currency (affects step value)
- Required field validation (default currency price required)
- Real-time JSON update to hidden input
- SweetAlert2 integration for validation errors
- Stock and weight fields per variation
- Delete variation support
Migration:
- Preserves data compatibility with Vue app format
- Same data structure: {key, name, stock, weight, active, prices[]}
- Prices array with currency triple format: 'code:::name:::symbol'
- Sorts default currency first in prices array
See MIGRATION_STRATEGY.md for full migration details
111 lines
1.8 KiB
CSS
111 lines
1.8 KiB
CSS
.formipay-global-settings {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
background: #f6f7f7;
|
|
}
|
|
|
|
.formipay-settings-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 16px 20px;
|
|
background: #fff;
|
|
border-bottom: 1px solid #e0e0e0;
|
|
}
|
|
|
|
.formipay-settings-header h1 {
|
|
margin: 0;
|
|
font-size: 20px;
|
|
font-weight: 600;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.formipay-settings-header svg {
|
|
fill: #1e1e1e;
|
|
}
|
|
|
|
.header-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.save-success {
|
|
color: #28a745;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.save-error {
|
|
color: #dc3545;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.formipay-settings-content {
|
|
display: flex;
|
|
flex: 1;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.formipay-settings-tabs {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 200px;
|
|
background: #fff;
|
|
border-right: 1px solid #e0e0e0;
|
|
}
|
|
|
|
.tab-button {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 12px 16px;
|
|
border: none;
|
|
background: transparent;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
transition: background 0.2s;
|
|
border-left: 3px solid transparent;
|
|
}
|
|
|
|
.tab-button:hover {
|
|
background: #f6f7f7;
|
|
}
|
|
|
|
.tab-button.is-active {
|
|
background: #f0f6fc;
|
|
border-left-color: #2271b1;
|
|
}
|
|
|
|
.tab-button .dashicons {
|
|
font-size: 16px;
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
|
|
.formipay-settings-panel {
|
|
flex: 1;
|
|
padding: 20px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.settings-panel {
|
|
max-width: 800px;
|
|
}
|
|
|
|
.settings-panel .components-panel__body {
|
|
border: 1px solid #e0e0e0;
|
|
}
|
|
|
|
.form-label {
|
|
display: block;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: #1e1e1e;
|
|
margin-bottom: 4px;
|
|
}
|