protected function getButtonLink(ExtensionContract $extension, string $action, string $icon): string
    {
        $actionUrl = URL::route(area() . '.modules.' . $action, [
                    'vendor' => $extension->getVendorName(),
                    'name'   => $extension->getPackageName(),
                    'csrf'   => true,
        ]);

        $notWritablePaths = $this->getNotWritablePaths();

        $label = trans('antares/foundation::label.extensions.actions.' . $action);

        if (count($notWritablePaths)) {
            $url = '#';

            $params = [
                'class'       => 'bindable component-error-modal',
                'data-title'  => trans('Not writable permissions for:'),
                'data-icon'   => $icon,
                'data-errors' => json_encode($notWritablePaths),
            ];
        } else {
            $name = $extension->getFriendlyName();
            $url  = URL::route(area() . '.modules.progress.index');

            $params = [
                'class'            => 'bindable component-prompt-modal',
                'data-title'       => trans('antares/foundation::messages.extensions.modal_title.' . $action),
                'data-icon'        => $icon,
                'data-action-url'  => $actionUrl,
                'data-description' => trans('antares/foundation::messages.extensions.modal_content.' . $action, compact('name')),
            ];
        }

        return (string) HTML::link($url, $label, $params);
    }