From 836e4fc95d48f5284ca369872914a007ecc5bf36 Mon Sep 17 00:00:00 2001 From: Russ Rimmerman Date: Wed, 11 Feb 2026 12:34:10 -0600 Subject: [PATCH] Update Power Apps Code Apps instructions: refine project context, improve folder structure, and clarify PowerProvider implementation --- .../power-apps-code-apps.instructions.md | 87 ++++++++----------- 1 file changed, 38 insertions(+), 49 deletions(-) diff --git a/instructions/power-apps-code-apps.instructions.md b/instructions/power-apps-code-apps.instructions.md index 5a2b4e26..0b0e7d9b 100644 --- a/instructions/power-apps-code-apps.instructions.md +++ b/instructions/power-apps-code-apps.instructions.md @@ -9,9 +9,9 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, ## Project Context -- **Power Apps Code Apps (Preview)**: Code-first web app development with Power Platform integration +- **Power Apps Code Apps**: Code-first web app development with Power Platform integration - **TypeScript + React**: Recommended frontend stack with Vite bundler -- **Power Platform SDK**: @microsoft/power-apps (current version ^0.3.1) for connector integration +- **Power Platform SDK**: @microsoft/power-apps (current version ^1.0.3) for connector integration - **PAC CLI**: Power Platform CLI for project management and deployment - **Port 3000**: Required for local development with Power Platform SDK - **Power Apps Premium**: End-user licensing requirement for production use @@ -25,14 +25,15 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, src/ ├── components/ # Reusable UI components ├── hooks/ # Custom React hooks for Power Platform - ├── services/ # Generated connector services (PAC CLI) - ├── models/ # Generated TypeScript models (PAC CLI) + ├── generated/ + │ ├── services/ # Generated connector services (PAC CLI) + │ └── models/ # Generated TypeScript models (PAC CLI) ├── utils/ # Utility functions and helpers ├── types/ # TypeScript type definitions - ├── PowerProvider.tsx # Power Platform initialization + ├── PowerProvider.tsx # Power Platform context wrapper └── main.tsx # Application entry point ``` -- Keep generated files (`services/`, `models/`) separate from custom code +- Keep generated files (`generated/services/`, `generated/models/`) separate from custom code - Use consistent naming conventions (kebab-case for files, PascalCase for components) ### TypeScript Configuration @@ -77,7 +78,7 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, ```typescript // Example: Using custom PCF control for data visualization import { PCFControlWrapper } from './components/PCFControlWrapper'; - + const MyComponent = () => { return ( { return ( { const formData = new FormData(); formData.append('file', file); - + const result = await AIBuilderService.ProcessDocument({ modelId: 'document-processing-model-id', document: formData }); - + return result.extractedFields; }; ``` @@ -141,12 +142,12 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, ```typescript import { DirectLine } from 'botframework-directlinejs'; import { WebChat } from 'botframework-webchat'; - + const ChatbotComponent = () => { const directLine = new DirectLine({ token: chatbotToken }); - + return (
@@ -159,23 +160,11 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, - Use generated TypeScript services from PAC CLI for connector operations - Implement proper authentication flows with Microsoft Entra ID - Handle connector consent dialogs and permission management -- PowerProvider implementation pattern: +- PowerProvider implementation pattern (no SDK initialization required in v1.0): ```typescript - import { initialize } from "@microsoft/power-apps/app"; - import { useEffect, type ReactNode } from "react"; + import type { ReactNode } from "react"; export default function PowerProvider({ children }: { children: ReactNode }) { - useEffect(() => { - const initApp = async () => { - try { - await initialize(); - console.log('Power Platform SDK initialized successfully'); - } catch (error) { - console.error('Failed to initialize Power Platform SDK:', error); - } - }; - initApp(); - }, []); return <>{children}; } ``` @@ -221,7 +210,7 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, // Handle polymorphic customer lookup (Account or Contact) const customerType = record.customerType; // 'account' or 'contact' const customerId = record.customerId; - const customer = customerType === 'account' + const customer = customerType === 'account' ? await AccountService.get(customerId) : await ContactService.get(customerId); ``` @@ -257,7 +246,7 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, const transaction = db.transaction(['data'], 'readwrite'); transaction.objectStore('data').put({ id: key, data, timestamp: Date.now() }); } - + async loadData(key: string) { const db = await this.openDB(); const transaction = db.transaction(['data'], 'readonly'); @@ -397,9 +386,9 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, onClick: () => void; children: React.ReactNode; } - - export const Button: React.FC = ({ - variant, size, disabled, onClick, children + + export const Button: React.FC = ({ + variant, size, disabled, onClick, children }) => { const classes = `btn btn-${variant} btn-${size} ${disabled ? 'btn-disabled' : ''}`; return ; @@ -416,14 +405,14 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, theme: 'light', toggleTheme: () => {} }); - + export const ThemeProvider: React.FC<{children: ReactNode}> = ({ children }) => { const [theme, setTheme] = useState<'light' | 'dark'>('light'); - + const toggleTheme = () => { setTheme(prev => prev === 'light' ? 'dark' : 'light'); }; - + return (
{children}
@@ -441,7 +430,7 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, .card-container { container-type: inline-size; } - + @container (min-width: 400px) { .card { display: grid; @@ -456,7 +445,7 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, - **Framer Motion integration**: Smooth animations and transitions ```typescript import { motion, AnimatePresence } from 'framer-motion'; - + const AnimatedCard = () => { return ( void, children: ReactNode}> = ({ - isOpen, onClose, children + const Modal: React.FC<{isOpen: boolean, onClose: () => void, children: ReactNode}> = ({ + isOpen, onClose, children }) => { useEffect(() => { if (isOpen) { @@ -491,11 +480,11 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, } return () => { document.body.style.overflow = 'unset'; }; }, [isOpen]); - + return ( -
@@ -512,10 +501,10 @@ Instructions for generating high-quality Power Apps Code Apps using TypeScript, - **React-intl integration**: Multi-language support ```typescript import { FormattedMessage, useIntl } from 'react-intl'; - + const WelcomeMessage = ({ userName }: { userName: string }) => { const intl = useIntl(); - + return (