';
$tabs = self::$tabs;
if ( ! empty( Settings::get( 'enable_tag_support' ) ) ) {
$pos = array_search( 'optimize_categories', $tabs, true );
array_splice( $tabs, false !== $pos ? $pos + 1 : count( $tabs ), 0, array( 'optimize_tags' ) );
}
foreach ( $tabs as $tab ) {
$label = Messages::get( 'tabs.' . $tab );
$active = $current_tab === $tab ? ' nav-tab-active' : '';
printf(
'%s',
esc_url( add_query_arg( 'tab', $tab, admin_url( 'admin.php?page=ai-content-by-parallax' ) ) ),
esc_attr( $active ),
esc_html( $label )
);
}
echo '';
}
/**
* Render the active tab content.
*
* @param string $current_tab Active tab key.
* @param Client $client Loaded client instance.
* @return void
*/
private static function display_current_tab( string $current_tab, Client $client ): void {
switch ( $current_tab ) {
case 'optimize_products':
OptimizeTable::display( 'Products', Filtered_Products::class, $client->get_credits() );
break;
case 'optimize_categories':
OptimizeTable::display( 'Product Categories', Filtered_Categories::class, $client->get_credits() );
break;
case 'optimize_tags':
OptimizeTable::display( 'Product Tags', Filtered_Tags::class, $client->get_credits() );
break;
case 'approval_import':
self::display_approval_import_tab();
break;
case 'connection':
self::display_credentials_form();
break;
default:
echo '' . esc_html( Messages::get( 'settings.select_tab' ) ) . '
';
}
}
/**
* Render the connection settings form.
*
* @return void
*/
private static function display_credentials_form(): void {
?>
' . esc_html( Messages::get( 'batch.no_requests_found' ) ) . '
';
return;
}
$placeholders = array(
array(
'key' => 'product_batch_requests',
'label' => Messages::get( 'batch.product_requests' ),
'empty' => Messages::get( 'batch.no_product_requests' ),
),
array(
'key' => 'category_batch_requests',
'label' => Messages::get( 'batch.category_requests' ),
'empty' => Messages::get( 'batch.no_category_requests' ),
),
array(
'key' => 'product_batch_request_details',
'label' => Messages::get( 'batch.product_details' ),
'empty' => Messages::get( 'batch.no_product_details' ),
),
array(
'key' => 'category_batch_request_details',
'label' => Messages::get( 'batch.category_details' ),
'empty' => Messages::get( 'batch.no_category_details' ),
),
);
foreach ( $placeholders as $placeholder ) {
self::render_ajax_table_placeholder(
(string) $placeholder['key'],
(string) $placeholder['label'],
(string) $placeholder['empty']
);
}
}
/**
* Output markup placeholder for an AJAX-loaded table.
*
* @param string $table_key Table identifier key.
* @param string $label Loading label.
* @param string $empty_text Empty state text.
* @return void
*/
private static function render_ajax_table_placeholder( string $table_key, string $label, string $empty_text ): void {
printf(
'',
esc_attr( $table_key ),
/* translators: %s: loading label */
esc_html( Messages::format( 'batch.loading', $label ) ),
esc_attr( $empty_text )
);
}
}