Skip to content

Commit

Permalink
Merge pull request #21 from vendidero/shipping-rules
Browse files Browse the repository at this point in the history
Shipping rules, label configuration sets
  • Loading branch information
dennisnissle authored Nov 21, 2023
2 parents 44df314 + 382e6f3 commit e40a6a4
Show file tree
Hide file tree
Showing 64 changed files with 16,307 additions and 6,097 deletions.
451 changes: 435 additions & 16 deletions assets/css/admin.scss

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions assets/js/static/admin-packaging.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
window.germanized = window.germanized || {};
window.germanized.admin = window.germanized.admin || {};

( function( $, admin ) {
admin.packaging = {
params: {},

init: function() {
var self = germanized.admin.packaging;

$( document )
.on( 'change', 'input.gzd-override-toggle', self.onChangeOverride );
},

onChangeOverride: function() {
var $checkbox = $( this ),
$wrapper = $checkbox.parents( '.wc-gzd-shipping-provider-override-title-wrapper' ),
$next = $wrapper.next( '.wc-gzd-packaging-zone-wrapper' );

$next.removeClass( 'zone-wrapper-has-override' );

if ( $checkbox.is( ':checked' ) ) {
$next.addClass( 'zone-wrapper-has-override' );
}
},
};

$( document ).ready( function() {
germanized.admin.packaging.init();
});

})( jQuery, window.germanized.admin );
172 changes: 172 additions & 0 deletions assets/js/static/admin-settings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
window.germanized = window.germanized || {};
window.germanized.admin = window.germanized.admin || {};

( function( $, admin ) {
admin.shipment_settings = {
params: {},

init: function() {
var self = germanized.admin.shipment_settings;
self.params = wc_gzd_admin_shipment_settings_params;

$( document )
.on( 'click', 'a.woocommerce-gzd-shipment-input-toggle-trigger', self.onInputToggleClick )
.on( 'change gzd_shipments_show_or_hide_fields', 'table.form-table :input[id]', self.onChangeInput );

$( 'table.form-table :input[id]' ).trigger( 'gzd_shipments_show_or_hide_fields' );
},

getCleanInputId: function( $mainInput ) {
var self = germanized.admin.shipment_settings,
fieldId = $mainInput.attr( 'id' ) ? $mainInput.attr( 'id' ) : $mainInput.attr( 'name' );

if ( self.params.hasOwnProperty( 'clean_input_callback' ) ) {
var callback = self.params.clean_input_callback,
params = [],
objectName = '',
methodName = '';

if ( callback.substring( 0, 17 ) === 'germanized.admin.' ) {
callback = callback.slice( 17 );

params = callback.split( "." );
objectName = germanized.admin[params[0]];
methodName = params[1];
} else {
params = callback.split( "." );
objectName = window[params[0]];
methodName = params[1];
}

if ( 'object' === typeof objectName && objectName.hasOwnProperty( methodName ) ) {
fieldId = objectName[methodName]( $mainInput );
}
}

if ( ! fieldId ) {
return '';
}

return fieldId;
},

getInputByIdOrName: function( $wrapper , cleanName ) {
var self = germanized.admin.shipment_settings;
cleanName = self.getCleanDataId( cleanName );

return $wrapper.find( ':input' ).filter( function() {
var id = self.getCleanInputId( $( this ) );

if ( ! id ) {
return false;
}

return self.getCleanDataId( id ) === cleanName;
});
},

/**
* Make sure to remove any hyphens as data-attributes are stored
* camel case without hyphens in the DOM.
*/
getCleanDataId: function( id ) {
return id.toLowerCase().replace( /-/g, '' );
},

onChangeInput: function() {
var self = germanized.admin.shipment_settings,
$mainInput = $( this ),
$wrapper = $( this ).parents( 'form' ),
mainId = self.getCleanInputId( $mainInput ),
$dependentFields = $wrapper.find( ':input[data-show_if_' + $.escapeSelector( mainId ) + ']' );

var $input, $field, data, meetsConditions, cleanName, $dependentField, valueExpected, val, isChecked;

$.each( $dependentFields, function () {
$input = $( this );
$field = $input.parents( 'tr' );
data = $input.data();
meetsConditions = true;

for ( var dataName in data ) {
if ( data.hasOwnProperty( dataName ) ) {
/**
* Check all the conditions for a dependent field.
*/
if ( dataName.substring( 0, 8 ) === 'show_if_' ) {
cleanName = dataName.replace( 'show_if_', '' );
$dependentField = self.getInputByIdOrName( $wrapper, cleanName );
valueExpected = $input.data( dataName ) ? $input.data( dataName ).split(',') : [];

if ( $dependentField.length > 0 ) {
val = $dependentField.val();
isChecked = false;

if ( $dependentField.is( ':radio' ) ) {
val = $dependentField.parents( 'fieldset' ).find( ':checked' ).length > 0 ? $dependentField.parents( 'fieldset' ).find( ':checked' ).val() : 'no';

if ( 'no' !== val ) {
isChecked = true;
}
} else if ( $dependentField.is( ':checkbox' ) ) {
val = $dependentField.is( ':checked' ) ? 'yes' : 'no';

if ( 'yes' === val ) {
isChecked = true;
}
} else {
isChecked = undefined !== val && '0' !== val && '' !== val;
}

if ( valueExpected && valueExpected.length > 0 ) {
if ( $.inArray( val, valueExpected ) === -1 ) {
meetsConditions = false;
}
} else if ( ! isChecked ) {
meetsConditions = false;
}
}

if ( ! meetsConditions ) {
break;
}
}
}
}

if ( meetsConditions ) {
$field.show();
} else {
$field.hide();
}
} );
},

onInputToggleClick: function() {
var $toggle = $( this ).find( 'span.woocommerce-gzd-input-toggle' ),
$row = $toggle.parents( 'fieldset' ),
$checkbox = $row.find( 'input[type=checkbox]' ),
$enabled = $toggle.hasClass( 'woocommerce-input-toggle--enabled' );

$toggle.removeClass( 'woocommerce-input-toggle--enabled' );
$toggle.removeClass( 'woocommerce-input-toggle--disabled' );

if ( $enabled ) {
$checkbox.prop( 'checked', false );
$toggle.addClass( 'woocommerce-input-toggle--disabled' );
} else {
$checkbox.prop( 'checked', true );
$toggle.addClass( 'woocommerce-input-toggle--enabled' );
}

$checkbox.trigger( 'change' );

return false;
}
};

$( document ).ready( function() {
germanized.admin.shipment_settings.init();
});

})( jQuery, window.germanized.admin );
38 changes: 31 additions & 7 deletions assets/js/static/admin-shipment-modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,37 @@ window.germanized.admin = window.germanized.admin || {};
} else {
$wrapper.find( ':input[data-show-if-' + fieldId + ']' ).parents( '.form-field' ).hide();

if ( $( this ).is( ':checkbox' ) ) {
if ( $( this ).is( ':checked' ) ) {
$wrapper.find( ':input[data-show-if-' + fieldId + ']' ).parents( '.form-field' ).show();
if ( $( this ).is( ':visible' ) ) {
if ( $( this ).is( ':checkbox' ) ) {
if ( $( this ).is( ':checked' ) ) {
$wrapper.find( ':input[data-show-if-' + fieldId + ']' ).parents( '.form-field' ).show();
}
} else {
if ( '0' !== val && '' !== val ) {
$wrapper.find( ':input[data-show-if-' + fieldId + '=""]' ).parents( '.form-field' ).show();
}

$wrapper.find( ':input[data-show-if-' + fieldId + '*="' + val + '"]' ).parents( '.form-field' ).show();
}
} else {
$wrapper.find( ':input[data-show-if-' + fieldId + '*="' + val + '"]' ).parents( '.form-field' ).show();
}

/**
* Hide the show more trigger in case no visible field is found within the wrapper.
* Explicitly check for the display style as the wrapper may be in collapsed state.
*/
$wrapper.find( '.show-more-wrapper' ).each( function() {
var $showMoreWrapper = $( this ),
hasVisible = $showMoreWrapper.find( 'p.form-field' ).css( 'display' ) !== 'none',
$trigger = $showMoreWrapper.data( 'trigger' ) ? $wrapper.find( $showMoreWrapper.data( 'trigger' ) ) : false;

if ( $trigger.length > 0 ) {
if ( ! hasVisible ) {
$trigger.hide();
} else {
$trigger.show();
}
}
} );
}
};

Expand Down Expand Up @@ -306,7 +330,7 @@ window.germanized.admin = window.germanized.admin || {};
self.$modal.on( 'keydown.gzd-modal-' + self.modalId, { adminShipmentModal: self }, self.onKeyDown );

self.$modal.on( 'click.gzd-modal-' + self.modalId, '.notice .notice-dismiss', { adminShipmentModal: self }, self.onRemoveNotice );
self.$modal.on( 'change.gzd-modal-' + self.modalId, ':input:visible[id]', { adminShipmentModal: self }, self.onChangeField );
self.$modal.on( 'change.gzd-modal-' + self.modalId, ':input[id]', { adminShipmentModal: self }, self.onChangeField );
self.$modal.on( 'click.gzd-modal-' + self.modalId, '.show-more', { adminShipmentModal: self }, self.onExpandMore );
self.$modal.on( 'click.gzd-modal-' + self.modalId, '.show-fewer', { adminShipmentModal: self }, self.onHideMore );

Expand Down Expand Up @@ -392,7 +416,7 @@ window.germanized.admin = window.germanized.admin || {};
var data = {}

$form.find( '.show-more-wrapper' ).each( function() {
if ( ! $( this ) .is( ':visible' ) ) {
if ( ! $( this ).is( ':visible' ) ) {
$( this ).addClass( 'show-more-wrapper-force-show' ).show();
}
} );
Expand Down
78 changes: 69 additions & 9 deletions assets/js/static/admin-shipments.js
Original file line number Diff line number Diff line change
Expand Up @@ -344,17 +344,77 @@ window.germanized.admin = window.germanized.admin || {};

$fields.each( function() {
var $field = $( this ),
isHidden = true,
supported = $field.data( 'products-supported' ).split( ',' );
supported = $field.data( 'products-supported' );

if ( supported.length > 0 ) {
if ( supported.indexOf( '&' ) > -1 && $field.is( 'select' ) ) {
var supportedData = supported.split( '&' ).filter( Boolean ),
needsReset = false;

$.each( supportedData, function( i, d ) {
var innerData = d.split( '=' ).filter( Boolean );

if ( innerData.length > 1 ) {
var optionKey = innerData[0];
var supportedProducts = innerData[1].split( ',' );
var isHidden = true;
var $option = $field.find( 'option[value="' + optionKey + '"]' );

if ( $option.length > 0 ) {
if ( $.inArray( productId, supportedProducts ) !== -1 ) {
isHidden = false;
}

if ( isHidden ) {
if ( $option.is( ':selected' ) ) {
needsReset = true;
}

$option.hide();
} else {
$option.show();
}
}
}
} );

if ( $.inArray( productId, supported ) !== -1 ) {
isHidden = false;
}
var isFieldHidden = true;

if ( isHidden ) {
$field.parents( '.form-field' ).hide();
} else {
$field.parents( '.form-field' ).show();
$field.find( 'option' ).each( function () {
if ( $( this ).css( 'display' ) !== 'none' ) {
if ( needsReset ) {
$( this ).prop("selected", true );
}
isFieldHidden = false;
return false;
}
});

if ( isFieldHidden ) {
$field.parents( '.form-field' ).hide();
$field.trigger( 'change' );
} else {
$field.parents( '.form-field' ).show();
$field.trigger( 'change' );
}

$field.trigger( 'change' );
} else {
var supportedProducts = supported.split( ',' ).filter( Boolean ),
isHidden = supportedProducts.length > 0 ? true : false;

if ( $.inArray( productId, supportedProducts ) !== -1 ) {
isHidden = false;
}

if ( isHidden ) {
$field.parents( '.form-field' ).hide();
$field.trigger( 'change' );
} else {
$field.parents( '.form-field' ).show();
$field.trigger( 'change' );
}
}
}
} );
},
Expand Down
Loading

0 comments on commit e40a6a4

Please sign in to comment.