• Как правльно использовать TS в монорепе?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Все интерфейсы что должны быть публичными - должны быть экспортированы в корне @company/core, точно также как и все модули.
    Ответ написан
    1 комментарий
  • Как лучше сделать экспорт класса, чтобы вызывать его как функцию?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Вам лень писать new? Имхо, это перебор. Не отвалятся у вас руки три лишних символа написать, и это будет куда нагляднее чем непонятные излишние функции.

    Но рас так хочется, то тип для твоей функции таков:
    function exportConstruct<P extends any[], T>(classFromExport: { new (...args: P): T; }): 
    (...args: P) => T {
      return (...args) => new classFromExport(...args);
    }

    Но так ты теряешь например возможность использовать статические методы класса.

    Если можешь использовать Proxy то можно просто сделать класс вызываемым:
    function exportCallable<T extends { new (...args: any[]): any; }>(classFromExport: T) {
      return new Proxy(classFromExport, {
        apply(ctor, _, args) {
          return new ctor(...args);
        }
      }) as T & ((...args: ConstructorParameters<T>) => InstanceType<T>);
    }
    
    const Lol = exportCallable(class Lol extends BaseLol {
      constructor(public name: string) {
        super();
        this.name = name.toUpperCase();
      }
    });
    
    Lol('qwe');


    Либо ты можешь просто добавть статический метод, который будет делать то же самое:
    abstract class Newable {
      static new<P extends any[], T>(this: { new (...args: P): T; }, ...args: P): T { 
        return (new this(...args)) as T
      }
    }
    
    class BaseLol extends Newable {  /* ... */ }
    
    class Lol extends BaseLol {
      constructor(public name: string) {
        super();
        this.name = name.toUpperCase();
      }
    }
    
    Lol.new('qwe');
    Ответ написан
  • Как сгенерировать список по многим условиям?

    @Carburn
    Решение без рекурсии
    function generator($str, $params) {
        $result = [$str];
    
        foreach ($params as $key => $param) {
            $values = is_array($params[$key]) ? $params[$key] : [$params[$key]];
            $copy = unserialize(serialize($result));
            
            foreach ($values as $val) {
                foreach ($result as &$oneResult) {
                    $oneResult = str_replace(sprintf("{%s}", $key), $val, $oneResult);
                }
                if ($val != end($values)) {
                    $result = array_merge($copy, $result);
                }
            }
        }
    
        return $result;
    }
    Ответ написан
    Комментировать
  • Как сгенерировать список по многим условиям?

    0xD34F
    @0xD34F
    function generator($str, $params) {
      $result = [];
    
      if (count($params)) {
        $key = key($params);
        $values = is_array($params[$key]) ? $params[$key] : [ $params[$key] ];
        unset($params[$key]);
    
        foreach ($values as $val) {
          array_push($result, ...generator(str_replace("{{$key}}", $val, $str), $params));
        }
      } else {
        $result[] = $str;
      }
    
      return $result;
    }
    Ответ написан
    5 комментариев
  • Какую админ-панель в Laravel выбрать?

    agoalofalife
    @agoalofalife
    Team Lead
    Из бесплатных могу вам порекомендовать orchid
    Перечислю плюсы:
    - Хорошо поддается кастомизации
    - Бесплатен
    - Документация на русском + разработчик тоже русский(я не приверженец только русского, наоборот за все английское) но часто напрямую обращался к разрабу решал какие то вопросы, на русском было конечно проще.
    - Отличная поддержка, регулярно обновляется и telegram постоянная движуха.
    - Из коробки есть сортировка, фильтры
    - Из коробки некий свой UI Kit которой сводит к минимуму трату времени на отрисовку интерфейса
    Минусы:
    - Свой подход к разработке и термины, надо потратить время для изучения, но это такое, любое решение требует время для изучения.

    Остальное можете прочитать в документации.
    Ответ написан
    2 комментария
  • Как выполнить запрос что бы отфильтровать по временным интевалам?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT *
      FROM `companies`
      WHERE `id` IN (
        SELECT `company_id`
          FROM `schedule`
          WHERE `day_of_week` = 1 
            AND `start_time` <= '12:30'
            AND `end_time` > '12:30'
      )
        AND `id` NOT IN (
          SELECT `company_id`
            FROM `breaks`
            WHERE `day_of_week` = 1
              AND `break_start` <= '12:30'
              AND `break_end` > '12:30'
        )
    Ответ написан
    3 комментария
  • Как построить структуру БД с расписанием на неделю с учётом выходных и перерывыов?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Две таблицы. Первая содержит график работы в конкретный день для конкретной компании:
    +------------+-------------+------------+----------+
    | company_id | day_of_week | start_time | end_time |
    +------------+-------------+------------+----------+
    |          1 |           0 | 09:00      | 18:00    |
    |          1 |           1 | 09:00      | 18:00    |
    +------------+-------------+------------+----------+

    Вторая содержит информацию о перерывах, структура точно такая же.
    +------------+-------------+-------------+-----------+
    | company_id | day_of_week | start_break | end_break |
    +------------+-------------+-------------+-----------+
    |          1 |           0 | 12:00       | 12:30     |
    |          1 |           0 | 15:30       | 15:55     |
    +------------+-------------+-------------+-----------+

    График работы уже будете собирать из данных, которые получите в таблице. Если в какой-то день недели выходной - можно или не создавать этот день в таблице, или заполнять его через null (start, end). Первый вариант предпочтительнее.
    Ответ написан
    1 комментарий
  • Как исправить скрипт?

    hrabry
    @hrabry
    <?php
    
    function getColors($item_colors, $result = []){
        preg_match_all('/(\w+),|(\w+)\/(\w+)/', $item_colors, $colors);
        foreach ($colors as $key => $value) {
            if ($key === 0) continue;
            array_push($result, ...$value);
        }
        return array_filter($result);
    }
    
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    echo implode(' ', getColors($item_colors));
    //steel large black orange
    
    var_dump(getColors($item_colors));
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [5]=>
    //   string(5) "black"
    //   [8]=>
    //   string(6) "orange"
    // }


    Live: https://3v4l.org/JqTN1

    Ещё вариант:
    <?php
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    $result = [];
    foreach (explode(', ', str_replace('Vario Base Unit with ','', $item_colors)) as $color) {
        $colors = explode('/', $color);
        count($colors) === 2 ? array_push($result, ...$colors) : array_push($result, $color);
    }
    
    
    
    echo implode(' ', $result);
    //steel large black orange
    
    var_dump($result);
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [2]=>
    //   string(5) "black"
    //   [3]=>
    //   string(6) "orange"
    // }


    Live: https://3v4l.org/1JR98

    Ещё вариант для извращенцев)
    <?php
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    $result = eval('return '.str_replace(['Vario Base Unit with ', '/', ', '], ['["',', ', '", "'], $item_colors).'"];');
    
    echo implode(' ', $result);
    //steel large black orange
    
    var_dump($result);
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [2]=>
    //   string(5) "black"
    //   [3]=>
    //   string(6) "orange"
    // }

    Live: https://3v4l.org/TBdId
    Ответ написан
    Комментировать
  • Как защититься от спама на лендинге без потери конвертации?

    Sanes
    @Sanes
    Если вас хотят заспамить, никакая капча не поможет. Её в ручном режиме индусы за 3 копейки разгадывают.
    Ответ написан
    2 комментария