/** * {@inheritdoc} */ public function sort(DataSourceInterface $dataSource, Grid $grid, Parameters $parameters) { $expressionBuilder = $dataSource->getExpressionBuilder(); $sorting = $parameters->has('sorting') ? $parameters->get('sorting') : $grid->getSorting(); foreach ($sorting as $field => $options) { if (!isset($options['direction'])) { $options['direction'] = 'desc'; } $property = $grid->getSorting()[$field]['path']; $expressionBuilder->addOrderBy($property, $options['direction']); } }
function it_sorts_the_data_source_via_expression_builder_based_on_sorting_parameter(Grid $grid, DataSourceInterface $dataSource, ExpressionBuilderInterface $expressionBuilder) { $parameters = new Parameters(['sorting' => ['name' => ['direction' => 'asc']]]); $dataSource->getExpressionBuilder()->willReturn($expressionBuilder); $grid->getSorting()->willReturn(['name' => ['path' => 'translation.name', 'direction' => 'desc']]); $expressionBuilder->addOrderBy('translation.name', 'asc')->shouldBeCalled(); $this->sort($dataSource, $grid, $parameters); }
/** * {@inheritdoc} */ public function sort(DataSourceInterface $dataSource, Grid $grid, Parameters $parameters) { $expressionBuilder = $dataSource->getExpressionBuilder(); $sorting = $parameters->has('sorting') ? $parameters->get('sorting') : $grid->getSorting(); foreach ($sorting as $field => $direction) { $expressionBuilder->addOrderBy($field, $direction); } }
function it_sorts_the_data_source_via_expression_builder_based_on_sorting_parameter(Grid $grid, Parameters $parameters, DataSourceInterface $dataSource, ExpressionBuilderInterface $expressionBuilder) { $parameters->has('sorting')->willReturn(true); $parameters->get('sorting')->willReturn(['name' => 'asc']); $dataSource->getExpressionBuilder()->willReturn($expressionBuilder); $grid->getSorting()->willReturn(['name' => 'desc']); $expressionBuilder->addOrderBy('name', 'asc')->shouldBeCalled(); $this->sort($dataSource, $grid, $parameters); }
function it_throws_exception_when_trying_to_sort_by_a_non_sortable_field(Grid $gridDefinition) { $gridDefinition->hasField('code')->willReturn(true); $gridDefinition->hasField('name')->willReturn(true); $gridDefinition->getSorting()->willReturn(['code' => ['path' => 'code', 'direction' => 'asc']]); $gridDefinition->isSortableBy('name')->willThrow(\InvalidArgumentException::class); $this->shouldThrow(\InvalidArgumentException::class)->during('isSortedBy', ['name']); $this->shouldThrow(\InvalidArgumentException::class)->during('getSortingOrder', ['name']); }
/** * {@inheritdoc} */ public function sort(DataSourceInterface $dataSource, Grid $grid, Parameters $parameters) { $expressionBuilder = $dataSource->getExpressionBuilder(); $sorting = $parameters->get('sorting', $grid->getSorting()); foreach ($sorting as $field => $order) { $gridField = $grid->getField($field); $property = $gridField->getSortable(); $expressionBuilder->addOrderBy($property, $order); } }
function it_sorts_the_data_source_via_expression_builder_based_on_sorting_parameter(Grid $grid, Field $nameField, DataSourceInterface $dataSource, ExpressionBuilderInterface $expressionBuilder) { $parameters = new Parameters(['sorting' => ['name' => 'asc']]); $dataSource->getExpressionBuilder()->willReturn($expressionBuilder); $grid->getSorting()->willReturn(['code' => 'desc']); $grid->hasField('name')->willReturn(true); $grid->getField('name')->willReturn($nameField); $nameField->isSortable()->willReturn(true); $nameField->getSortable()->willReturn('translation.name'); $expressionBuilder->addOrderBy('translation.name', 'asc')->shouldBeCalled(); $this->sort($dataSource, $grid, $parameters); }
function it_uses_default_sorting_if_not_provided_in_parameters(Grid $gridDefinition, Parameters $parameters) { $gridDefinition->hasField('foo')->willReturn(true); $gridDefinition->hasField('name')->willReturn(true); $gridDefinition->hasField('code')->willReturn(true); $gridDefinition->getSorting()->willReturn(['name' => 'desc']); $parameters->has('sorting')->willReturn(false); $this->isSortedBy('foo')->shouldReturn(false); $this->isSortedBy('name')->shouldReturn(true); $this->isSortedBy('code')->shouldReturn(false); $this->getSortingOrder('name')->shouldReturn('desc'); }
/** * @return array|mixed */ private function getCurrentlySortedBy() { return $this->parameters->has('sorting') ? array_merge($this->definition->getSorting(), $this->parameters->get('sorting')) : $this->definition->getSorting(); }
/** * @return array|mixed */ private function getCurrentSorting() { return $this->parameters->has('sorting') ? $this->parameters->get('sorting') : $this->definition->getSorting(); }