# Исходный код components_derived.sidebar_filter_component

    """Модуль компонента боковой панели формы ввода полей фильтрации отображения данных в панели событий. Содержит класс
    для работы с формами ввода, их элементами и проверками."""

    from playwright.sync_api import Page, Locator
    from tools.logger import get_logger
    from elements.button_element import Button
    from components.toolbar_component import ToolbarComponent
    from components.base_component import BaseComponent
    from components_derived.selection_bar_component import SelectionBarComponent
    from components_derived.date_input_component import DateInput

    logger = get_logger("SIDEBAR_FILTER")

    class SidebarFilterComponent(BaseComponent):
        """Компонент боковой панели формы ввода полей фильтрации отображения данных в панели событий. Предоставляет методы
        для взаимодействия с формой, ее содержимым и проверок."""

        def __init__(self, page: Page, locator: str | Locator):
            """Инициализирует компонент боковой панели формы ввода параметров фильтрации.

            Args:
                page: Экземпляр страницы Playwright
                locator: Локатор контейнера (строка или объект Locator) для которого вызывается панель
            """
            super().__init__(page)

            self.sidebar_locator = self.get_locator(locator)

            self.toolbar = ToolbarComponent(page, "Настройки и параметры")

            # Поля ввода даты начала и даты окончания события
            self.start_time_filter = DateInput(page,
                                               self.sidebar_locator.locator(
                                               "//div[contains(@class, 'scrollarea__body')]/div").nth(0))
            self.finish_time_filter = DateInput(page,
                                               self.sidebar_locator.locator(
                                               "//div[contains(@class, 'scrollarea__body')]/div").nth(1))

            # Поля задания параметров фильтрации (произвольное количество)
            self.filtering_parameters = {}

            # Кнопки задания/сброса параметров фильтрации
            self.apply_button = Button(page,
                                       self.sidebar_locator.get_by_role("button").filter(has_text='Применить Фильтры'),
                                       "apply_button")
            self.reset_button = Button(page,
                                       self.sidebar_locator.get_by_role("button").filter(has_text='Сбросить Фильтры'),
                                       "reset_button")

        # Действия:

        def add_filtering_parameter(self, name: str, title: str) -> None:
            """Добавляет поле задания параметров фильтрации по заданному имени."""

            loc = self.sidebar_locator.locator("//div[contains(@class, 'scrollarea__body')]").\
                                       get_by_role("combobox").filter(has_text=title)
            self.filtering_parameters[name] = SelectionBarComponent(self.page, loc)

        def get_filtering_parameter(self, name: str) -> SelectionBarComponent | None:
            """Возвращает поле задания параметров фильтрации по заданному или None, если не найдено."""

            return self.filtering_parameters.get(name)

        def get_start_time_filter(self) -> DateInput:
            """Возвращает поле задания параметров фильтрации даты начала."""

            return self.start_time_filter

        def get_finish_time_filter(self) -> DateInput:
            """Возвращает поле задания параметров фильтрации даты окончания."""

            return self.finish_time_filter

        def click_apply_button(self) -> None:
            """Клик по кнопке применения фильтра."""

            self.apply_button.click()

        def click_reset_button(self) -> None:
            """Клик по кнопке сброса фильтра."""

            self.reset_button.click()

        # Проверки:

        def check_content(self) -> None:
            """Проверяет наличие постоянных полей панели параметров фильтрации."""

            self.should_be_toolbar()
            self.start_time_filter.check_content("Дата начала")
            self.finish_time_filter.check_content("Дата окончания")

            self.check_apply_button_visibility()
            self.check_reset_button_visibility()

        def check_vertical_scrolling(self, locator: str| Locator) -> bool:
            """Проверяет возможность вертикальной прокрутки формы."""

            return self.is_scrollable_vertically(locator)

        def check_apply_button_visibility(self) -> None:
            """Проверяет наличие кнопки применения фильтра."""

            self.apply_button.check_visibility("Apply Filter Button is missing")

        def check_reset_button_visibility(self) -> None:
            """Проверяет наличие кнопки сброса фильтра."""

            self.reset_button.check_visibility("Reset Filter Button is missing")

        def should_be_toolbar(self) -> None:
            """Проверяет наличие тулбара.

            Raises:
                AssertionError: Если тулбар отсутствует.
            """

            self.toolbar.check_toolbar_presence_by_locator_and_title(self.sidebar_locator,
                                                                     "Sidebar Filter form toolbar is missing")