Access type (#2523)

This commit is contained in:
pablodanswer 2024-09-20 11:16:37 -07:00 committed by GitHub
parent 87b542b335
commit 122e3fa3fa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 49 additions and 34 deletions

View File

@ -51,11 +51,6 @@ export function CustomLLMProviderUpdateForm({
}) { }) {
const { mutate } = useSWRConfig(); const { mutate } = useSWRConfig();
const isPaidEnterpriseFeaturesEnabled = usePaidEnterpriseFeaturesEnabled();
// EE only
const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups();
const [isTesting, setIsTesting] = useState(false); const [isTesting, setIsTesting] = useState(false);
const [testError, setTestError] = useState<string>(""); const [testError, setTestError] = useState<string>("");

View File

@ -247,7 +247,6 @@ export default function AddConnector({
indexingStart, indexingStart,
refreshFreq, refreshFreq,
auto_sync_options, auto_sync_options,
is_public,
...connector_specific_config ...connector_specific_config
} = values; } = values;

View File

@ -3,7 +3,7 @@ import React, { useState, useEffect } from "react";
import { FormikProps, FieldArray, ArrayHelpers, ErrorMessage } from "formik"; import { FormikProps, FieldArray, ArrayHelpers, ErrorMessage } from "formik";
import { Text, Divider } from "@tremor/react"; import { Text, Divider } from "@tremor/react";
import { FiUsers } from "react-icons/fi"; import { FiUsers } from "react-icons/fi";
import { UserGroup, User, UserRole } from "@/lib/types"; import { UserGroup, UserRole } from "@/lib/types";
import { useUserGroups } from "@/lib/hooks"; import { useUserGroups } from "@/lib/hooks";
import { BooleanFormField } from "@/components/admin/connectors/Field"; import { BooleanFormField } from "@/components/admin/connectors/Field";
import { useUser } from "./user/UserProvider"; import { useUser } from "./user/UserProvider";

View File

@ -9,6 +9,9 @@ import { Text, Title } from "@tremor/react";
import { useUser } from "@/components/user/UserProvider"; import { useUser } from "@/components/user/UserProvider";
import { useField } from "formik"; import { useField } from "formik";
import { AutoSyncOptions } from "./AutoSyncOptions"; import { AutoSyncOptions } from "./AutoSyncOptions";
import { useContext } from "react";
import { SettingsContext } from "@/components/settings/SettingsProvider";
import { usePaidEnterpriseFeaturesEnabled } from "@/components/settings/usePaidEnterpriseFeaturesEnabled";
function isValidAutoSyncSource( function isValidAutoSyncSource(
value: ConfigurableSources value: ConfigurableSources
@ -24,6 +27,8 @@ export function AccessTypeForm({
const [access_type, meta, access_type_helpers] = const [access_type, meta, access_type_helpers] =
useField<AccessType>("access_type"); useField<AccessType>("access_type");
const isPaidEnterpriseEnabled = usePaidEnterpriseFeaturesEnabled();
const settings = useContext(SettingsContext);
const isAutoSyncSupported = isValidAutoSyncSource(connector); const isAutoSyncSupported = isValidAutoSyncSource(connector);
const { isLoadingUser, isAdmin } = useUser(); const { isLoadingUser, isAdmin } = useUser();
@ -55,34 +60,42 @@ export function AccessTypeForm({
} }
return ( return (
<div> <>
<div className="flex gap-x-2 items-center"> {isPaidEnterpriseEnabled && (
<label className="text-text-950 font-medium">Document Access</label>
</div>
<p className="text-sm text-text-500 mb-2">
Control who has access to the documents indexed by this connector.
</p>
{isAdmin && (
<> <>
<DefaultDropdown <div>
options={options} <div className="flex gap-x-2 items-center">
selected={access_type.value} <label className="text-text-950 font-medium">
onSelect={(selected) => Document Access
access_type_helpers.setValue(selected as AccessType) </label>
}
includeDefault={false}
/>
{access_type.value === "sync" && isAutoSyncSupported && (
<div className="mt-6">
<AutoSyncOptions
connectorType={connector as ValidAutoSyncSources}
/>
</div> </div>
)} <p className="text-sm text-text-500 mb-2">
Control who has access to the documents indexed by this connector.
</p>
{isAdmin && (
<>
<DefaultDropdown
options={options}
selected={access_type.value}
onSelect={(selected) =>
access_type_helpers.setValue(selected as AccessType)
}
includeDefault={false}
/>
{access_type.value === "sync" && isAutoSyncSupported && (
<div className="mt-6">
<AutoSyncOptions
connectorType={connector as ValidAutoSyncSources}
/>
</div>
)}
</>
)}
</div>
</> </>
)} )}
</div> </>
); );
} }

View File

@ -10,6 +10,12 @@ import { useUser } from "@/components/user/UserProvider";
// This should be included for all forms that require groups / public access // This should be included for all forms that require groups / public access
// to be set, and access to this / permissioning should be handled within this component itself. // to be set, and access to this / permissioning should be handled within this component itself.
export type AccessTypeGroupSelectorFormType = {
access_type: AccessType;
groups: number[];
};
export function AccessTypeGroupSelector({}: {}) { export function AccessTypeGroupSelector({}: {}) {
const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups(); const { data: userGroups, isLoading: userGroupsIsLoading } = useUserGroups();
const { isAdmin, user, isLoadingUser, isCurator } = useUser(); const { isAdmin, user, isLoadingUser, isCurator } = useUser();

View File

@ -1,6 +1,7 @@
import * as Yup from "yup"; import * as Yup from "yup";
import { IsPublicGroupSelectorFormType } from "@/components/IsPublicGroupSelector"; import { IsPublicGroupSelectorFormType } from "@/components/IsPublicGroupSelector";
import { ConfigurableSources, ValidInputTypes, ValidSources } from "../types"; import { ConfigurableSources, ValidInputTypes, ValidSources } from "../types";
import { AccessTypeGroupSelectorFormType } from "@/components/admin/connectors/AccessTypeGroupSelector";
export type InputType = export type InputType =
| "list" | "list"
@ -845,13 +846,13 @@ For example, specifying .*-support.* as a "channel" will cause the connector to
}; };
export function createConnectorInitialValues( export function createConnectorInitialValues(
connector: ConfigurableSources connector: ConfigurableSources
): Record<string, any> & IsPublicGroupSelectorFormType { ): Record<string, any> & AccessTypeGroupSelectorFormType {
const configuration = connectorConfigs[connector]; const configuration = connectorConfigs[connector];
return { return {
name: "", name: "",
groups: [], groups: [],
is_public: true, access_type: "public",
...configuration.values.reduce( ...configuration.values.reduce(
(acc, field) => { (acc, field) => {
if (field.type === "select") { if (field.type === "select") {
@ -876,6 +877,7 @@ export function createConnectorValidationSchema(
const configuration = connectorConfigs[connector]; const configuration = connectorConfigs[connector];
return Yup.object().shape({ return Yup.object().shape({
access_type: Yup.string().required("Access Type is required"),
name: Yup.string().required("Connector Name is required"), name: Yup.string().required("Connector Name is required"),
...configuration.values.reduce( ...configuration.values.reduce(
(acc, field) => { (acc, field) => {