├── .gitignore ├── CREATE_USING_YEOMAN.md ├── README.md ├── app.css ├── assets ├── icon-16.png ├── icon-32.png ├── icon-80.png └── logo-filled.png ├── certs ├── ca.crt ├── server.crt └── server.key ├── config ├── webpack.common.js ├── webpack.dev.js └── webpack.prod.js ├── function-file ├── function-file.html └── function-file.ts ├── manifest.xml ├── package-lock.json ├── package.json ├── resource.html ├── src ├── components │ ├── App.tsx │ ├── Header.tsx │ ├── HeroList.tsx │ └── Progress.tsx ├── index.html ├── index.tsx ├── registerServiceWorker.js └── styles.less ├── tsconfig.json ├── tslint.json └── webpack.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. 2 | # See LICENSE in the project root for license information. 3 | 4 | # Created by https://www.gitignore.io/api/osx,windows 5 | 6 | ### OSX ### 7 | .DS_Store 8 | .AppleDouble 9 | .LSOverride 10 | 11 | # Icon must end with two \r 12 | Icon 13 | 14 | 15 | # Thumbnails 16 | ._* 17 | 18 | # Files that might appear in the root of a volume 19 | .DocumentRevisions-V100 20 | .fseventsd 21 | .Spotlight-V100 22 | .TemporaryItems 23 | .Trashes 24 | .VolumeIcon.icns 25 | 26 | # Directories potentially created on remote AFP share 27 | .AppleDB 28 | .AppleDesktop 29 | Network Trash Folder 30 | Temporary Items 31 | .apdisk 32 | 33 | 34 | ### Windows ### 35 | # Windows image file caches 36 | Thumbs.db 37 | ehthumbs.db 38 | 39 | # Folder config file 40 | Desktop.ini 41 | 42 | # Recycle Bin used on file shares 43 | $RECYCLE.BIN/ 44 | 45 | # Windows Installer files 46 | *.cab 47 | *.msi 48 | *.msm 49 | *.msp 50 | 51 | # Windows shortcuts 52 | *.lnk 53 | 54 | # Ignore the following folders 55 | .vs 56 | .idea 57 | *.log 58 | obj 59 | bin 60 | *.user 61 | 62 | node_modules/** 63 | packages/** 64 | typings/** 65 | .vscode/** 66 | .awcache/** 67 | -------------------------------------------------------------------------------- /CREATE_USING_YEOMAN.md: -------------------------------------------------------------------------------- 1 | ``` 2 | yo office 3 | ``` 4 | - 5 | - **Choose a project type** - Office Add-in project using Jquery framework 6 | - **Choose a script type** - Javascript 7 | - **What do you want to name your add-in?** - My Office Add-in 8 | - **Which Office client application would you like to support?** - Outlook 9 | 10 | ![](data:image/*;base64,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) 11 | 12 | After you complete the wizard, the generator will create the project and install supporting Node components. 13 | 14 | - Navigate to the root folder of the web application project. 15 | 16 | ``` 17 | cd "My Office Add-in"; 18 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **Developing Office 365 Outlook Add-in with [Office UI Fabric React](https://developer.microsoft.com/en-us/fabric#/get-started#react)** 2 | 3 | ## **Note:** 4 | - Outlook add-in works only for Office365 users and not for any other users with Gmail or simple outlook.com accounts. 5 | - Outlook add-in can be developded using one of the pure JS, React JS, Angular JS or Vue JS 6 | - Before developing any add-on for production environment, please go through best practices suggested by Microsoft 7 | https://docs.microsoft.com/en-us/office/dev/add-ins/concepts/add-in-development-best-practices 8 | https://docs.microsoft.com/en-us/office/dev/add-ins/design/ux-design-pattern-templates 9 | 10 | ## **Technology Stack** 11 | 1) React - Office UI Fabric React - For the UI design 12 | 13 | ## How to make a boiler-plate template? 14 | There are two ways to make the boiler plat template for this kind of project. 15 | 16 | 1) Using create-react-app and 17 | 2) Using Yeoman project generator 18 | 19 | We are going to build our project using create-react-app 20 | 21 | ## **Prerequisites** 22 | 1) Install create-react-app 23 | ``` 24 | npm install -g create-react-app 25 | ``` 26 | 2) Install Yeoman 27 | ``` 28 | npm install -g yo 29 | ``` 30 | 31 | 3) Install Office Addin Project Creator 32 | 33 | ``` 34 | npm install -g yo generator-office 35 | ``` 36 | 37 | ## Creating the outlook Add-in App and Installing the Dependencies 38 | 39 | Run following commands on the Command Prompt 40 | 41 | 1) Generate the new React App 42 | 43 | ``` 44 | npx create-react-app outlook_leave_addin_app 45 | ``` 46 | 2) Navigate to the outlook_leave_addin_app folder 47 | 48 | ``` 49 | cd outlook_leave_addin_app 50 | ``` 51 | 52 | 3) Follow the steps [here](https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-get-started-react#generate-the-manifest-file-and-sideload-the-add-in) (**select outlook for "Which Office client application would you like to support" question**) to create the office add-in manifest file. 53 | 54 | 4) Install "office-js". 55 | 56 | ``` 57 | npm install @micrsoft\office-js --save 58 | ``` 59 | 60 | Ref:(https://github.com/OfficeDev/office-js) 61 | 62 | 5) Install the Fabric React package 63 | 64 | ``` 65 | npm --save install office-ui-fabric-react 66 | ``` 67 | 68 | 6) For styling run following command to install required packages 69 | 70 | ``` 71 | npm install --save @uifabric/styling 72 | ``` 73 | 74 | 7) Run the following command to use the [Office fabric UI Layouts](https://developer.microsoft.com/en-us/fabric#/styles/layout) 75 | 76 | ``` 77 | npm install office-ui-fabric-core 78 | ``` 79 | 8) Run following command if you want to use axios. 80 | 81 | ``` 82 | npm install axios 83 | ``` 84 | 85 | Note: To run the React app locally with HTTPS, type the following command in the location of the root folder.Because, add-ins communicate only with https end points. 86 | 87 | 88 | ``` 89 | set HTTPS=true&&npm start 90 | ``` 91 | 92 | ## How to Build the Addin 93 | 94 | 1) Put following setting in the ```package.json```. This setting will make sure to refer the "js" and "css" files in the ```assets``` folder using the relative path in the index.html of the build package. [More details are here.](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#serving-the-same-build-from-different-paths) 95 | 96 | ``` 97 | put this in your package.json 98 | ``` 99 | 100 | 2) Run the following command to build the package 101 | 102 | ``` 103 | npm run build 104 | ``` 105 | 106 | 3) Build package will created be in the ```build``` folder. 107 | 108 | ### References 109 | 110 | https://docs.microsoft.com/en-us/office/dev/add-ins/overview/office-add-ins?context=outlook/context 111 | 112 | https://docs.microsoft.com/en-us/outlook/ 113 | 114 | https://docs.microsoft.com/en-us/outlook/add-ins/ 115 | 116 | https://docs.microsoft.com/en-us/outlook/add-ins/quick-start?tabs=visual-studio-code 117 | 118 | https://docs.microsoft.com/en-us/outlook/add-ins/addin-tutorial 119 | 120 | https://docs.microsoft.com/en-us/office/dev/add-ins/concepts/add-in-development-lifecycle 121 | 122 | https://dev.office.com/reference/add-ins/outlook/1.5/Office.context.mailbox.item 123 | 124 | https://github.com/OfficeDev/office-js-docs/blob/master/reference/ 125 | 126 | https://github.com/OfficeDev/office-ui-fabric-react/tree/master/packages/office-ui-fabric-react/src/components 127 | 128 | https://docs.microsoft.com/en-us/office/dev/add-ins/develop/use-the-oauth-authorization-framework-in-an-office-add-in 129 | 130 | https://developer.microsoft.com/en-us/office/docs 131 | 132 | https://github.com/OfficeDev/office-ui-fabric-react/blob/master/packages/icons/README.md 133 | 134 | https://github.com/OfficeDev/office-ui-fabric-react/tree/master/packages/styling 135 | 136 | https://docs.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-get-started-react 137 | 138 | https://github.com/OfficeDev/office-js 139 | 140 | https://developer.microsoft.com/en-us/fabric#/get-started 141 | -------------------------------------------------------------------------------- /app.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. 3 | * See LICENSE in the project root for license information. 4 | */ 5 | 6 | html, 7 | body { 8 | width: 100%; 9 | height: 100%; 10 | margin: 0; 11 | padding: 0; 12 | } 13 | 14 | ul, 15 | p, 16 | h1, 17 | h2, 18 | h3, 19 | h4, 20 | h5, 21 | h6 { 22 | margin: 0; 23 | padding: 0; 24 | } 25 | 26 | .ms-welcome { 27 | position: relative; 28 | display: -webkit-flex; 29 | display: flex; 30 | -webkit-flex-direction: column; 31 | flex-direction: column; 32 | -webkit-flex-wrap: nowrap; 33 | flex-wrap: nowrap; 34 | min-height: 500px; 35 | min-width: 320px; 36 | overflow: auto; 37 | overflow-x: hidden; 38 | } 39 | 40 | .ms-welcome__header { 41 | min-height: 250px; 42 | padding: 20px; 43 | padding-bottom: 30px; 44 | display: -webkit-flex; 45 | display: flex; 46 | -webkit-flex-direction: column; 47 | flex-direction: column; 48 | -webkit-flex-wrap: nowrap; 49 | flex-wrap: nowrap; 50 | -webkit-align-items: center; 51 | align-items: center; 52 | -webkit-justify-content: flex-end; 53 | justify-content: flex-end; 54 | } 55 | 56 | .ms-welcome__header > h1 { 57 | margin-top: 30px; 58 | text-align: center; 59 | } 60 | 61 | .ms-welcome__main { 62 | display: -webkit-flex; 63 | display: flex; 64 | -webkit-flex-direction: column; 65 | flex-direction: column; 66 | -webkit-flex-wrap: nowrap; 67 | flex-wrap: nowrap; 68 | -webkit-align-items: center; 69 | align-items: center; 70 | -webkit-flex: 1 0 0; 71 | flex: 1 0 0; 72 | padding: 30px 20px; 73 | } 74 | 75 | .ms-welcome__main > h2 { 76 | width: 100%; 77 | text-align: center; 78 | } 79 | 80 | .ms-welcome__features { 81 | list-style-type: none; 82 | margin-top: 30px; 83 | } 84 | 85 | .ms-welcome__features.ms-List .ms-ListItem { 86 | padding: 0px; 87 | padding-bottom: 20px; 88 | display: -webkit-flex; 89 | display: flex; 90 | -webkit-flex-direction: row; 91 | flex-direction: row; 92 | -webkit-flex-wrap: nowrap; 93 | flex-wrap: nowrap; 94 | -webkit-align-items: center; 95 | align-items: center; 96 | } 97 | 98 | .ms-welcome__features.ms-List .ms-ListItem > .ms-Icon { 99 | font-size: 14pt; 100 | } 101 | 102 | .ms-welcome__features.ms-List .ms-ListItem > .ms-Icon { 103 | margin-right: 10px; 104 | } 105 | 106 | .ms-welcome__action.ms-Button--hero { 107 | margin-top: 30px; 108 | display: -webkit-flex; 109 | display: flex; 110 | -webkit-flex-direction: row; 111 | flex-direction: row; 112 | -webkit-flex-wrap: nowrap; 113 | flex-wrap: nowrap; 114 | -webkit-justify-content: center; 115 | justify-content: center; 116 | -webkit-align-items: center; 117 | align-items: center; 118 | } 119 | 120 | .ms-welcome__action.ms-Button--hero .ms-Button-icon .ms-Icon { 121 | margin-left: 5px; 122 | margin-top: 4px; 123 | border: none; 124 | font-size: 14pt; 125 | } 126 | 127 | .ms-welcome__action.ms-Button--hero:hover .ms-Button-icon .ms-Icon { 128 | border: none; 129 | } 130 | 131 | @media (min-width: 0) and (max-width: 350px) { 132 | .ms-welcome__features { 133 | width: 100%; 134 | } 135 | } -------------------------------------------------------------------------------- /assets/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthGajjar/Outlook-addin-using-react-demo/de2924a099baaee51252acc700b44f1c93c4e08e/assets/icon-16.png -------------------------------------------------------------------------------- /assets/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthGajjar/Outlook-addin-using-react-demo/de2924a099baaee51252acc700b44f1c93c4e08e/assets/icon-32.png -------------------------------------------------------------------------------- /assets/icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthGajjar/Outlook-addin-using-react-demo/de2924a099baaee51252acc700b44f1c93c4e08e/assets/icon-80.png -------------------------------------------------------------------------------- /assets/logo-filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthGajjar/Outlook-addin-using-react-demo/de2924a099baaee51252acc700b44f1c93c4e08e/assets/logo-filled.png -------------------------------------------------------------------------------- /certs/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDtzCCAp+gAwIBAgIJAM2mE5TOxoFEMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV 3 | BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHUmVkbW9uZDEPMA0GA1UECgwG 4 | T2ZmaWNlMRwwGgYDVQQLDBNPZmZpY2VFeHRlbnNpYmlsaXR5MRUwEwYDVQQDDAxs 5 | b2NhbGhvc3QtY2EwHhcNMTgwNDExMTgwNjExWhcNMjMwNDExMTgwNjExWjByMQsw 6 | CQYDVQQGEwJVUzELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1JlZG1vbmQxDzANBgNV 7 | BAoMBk9mZmljZTEcMBoGA1UECwwTT2ZmaWNlRXh0ZW5zaWJpbGl0eTEVMBMGA1UE 8 | AwwMbG9jYWxob3N0LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA 9 | ymd3VtdKsAtRo2Ug5cpC2sXa2VACIbwkQHNEps2Q8wcBhAdfahKIStfQKrTF8UqW 10 | tcpfSIhxcBMBhBITDXKlnu1HRO77ufC/w1AToJKPfzC2RfMEiLpeuHk8Sy65ST8f 11 | o3L1BuqwYsVspFu//hLpeGQAv7Z4QV/DOeR2Uw8bi9m8ayYEDaMckVq1Pq7gF+vP 12 | tOG/EDyAHoM5PzWd75TNNM3ysbN0edT9SEk3fOUOR1b0M0QXsxRAzgkpFUtTFy4a 13 | 7YMFL113Jb+wMiUS7KZJalDrcjhthJInlAUwYNE3qFGqK412VbGDnwnas7L3+m8u 14 | PXM6AMgFKRvT+48zf9JkyQIDAQABo1AwTjAdBgNVHQ4EFgQUAnM7hKUXgNu7/kXI 15 | TkhWbbx428IwHwYDVR0jBBgwFoAUAnM7hKUXgNu7/kXITkhWbbx428IwDAYDVR0T 16 | BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAPcsXB8fcFuRf3OuX7iUFPU1c04VK 17 | 1y0HnWNC0jkPQKAale5+AsV99TFIBxb4ml+iokUU+SIdMwlHFkeVeVHhH8545LUF 18 | lbRQCjlcWsN9eAAci7h+BxE9sQt4LBNGmedzM+7+9rR3pzMI6zsaVyK7xS85G1mF 19 | nw3Ajfs+zqu3li+wsVF/4M7o6z0mjA036ejh3YgLabMSNHfNA+1ltPZwlKSE6+zR 20 | Wudewkb2yeDK85Z4l3vOhZPtZsBV2Uni34qXdTSAPGSXcRKd9NuArTjvt1QbD313 21 | 8YY1RxQjEDdW14StquAbm8BCrGZ6ks3h5mJQh++6pqELRI3P24e5zc1gIg== 22 | -----END CERTIFICATE----- 23 | -------------------------------------------------------------------------------- /certs/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDljCCAn6gAwIBAgIJAIReiYJV7pQTMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV 3 | BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHUmVkbW9uZDEPMA0GA1UECgwG 4 | T2ZmaWNlMRwwGgYDVQQLDBNPZmZpY2VFeHRlbnNpYmlsaXR5MRUwEwYDVQQDDAxs 5 | b2NhbGhvc3QtY2EwIBcNMTgwNDExMTgwNjQxWhgPMjExODAzMTgxODA2NDFaMG8x 6 | CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHUmVkbW9uZDEPMA0G 7 | A1UECgwGT2ZmaWNlMRwwGgYDVQQLDBNPZmZpY2VFeHRlbnNpYmlsaXR5MRIwEAYD 8 | VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz 9 | h4LApOQXf9U5xukxNpWjhn653YhcXjJ1asK1RTQwvYQoJWpFvrX12Z7EzydpkR8l 10 | TRGZmghfF6LtKlci8GNwActPC5v/0hO6IpabDdVntaEVrwO8VACkBQi1N1CrtL05 11 | 6gz4Aj2xMLYp6k2DVz1UWxF40YnPsWSRHzW8OmtP0U5XLIiwrxh9G4lwuFFan+Ha 12 | 346Hyjagt8ptc8S3FSRF/06J4iR9kvM6iCy9DWP44HPxQQFQ2VRN8E+TpJdevtx3 13 | F1JZ8GsawKKRbeX2o++j1GMGCkeUGe9G6YBX0mD3d/Bx69gm1E2SRmdiJzEWQoZC 14 | yzIAK72YF+QiHi1qdzSVAgMBAAGjMDAuMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXg 15 | MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAekvobOVm 16 | hFgd6io16OeXahtKDaCm1NMw1YJoFE5LmBZRqJf8gAHT58Vg470lyURFxcn0MxXO 17 | Ho/wQlqZ/ycele9zkp3GPl03+7gA9py5EPvYyfuElQB0rG6TwIsAOD76Fubzom+X 18 | t+NE8zwF2Py2iMy+4YbiJqck+GfLOVPRaXgJt1BvY70G7GYOxOu+fLJuEsyvbwfN 19 | OhyDxGdQL/1CqasV3AOb+60qmHAg/eDx+T3M4ruTvrLsrtoRHsONyg3NQOEvgOEO 20 | 8s/7BdMwwa0l4swlF0ozTeyaq0wfEHa1N1Wh8xH3EKSsiyOZclsPe2FG348W6GQA 21 | Hmv1P1mWNdKYWg== 22 | -----END CERTIFICATE----- 23 | -------------------------------------------------------------------------------- /certs/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzh4LApOQXf9U5 3 | xukxNpWjhn653YhcXjJ1asK1RTQwvYQoJWpFvrX12Z7EzydpkR8lTRGZmghfF6Lt 4 | Klci8GNwActPC5v/0hO6IpabDdVntaEVrwO8VACkBQi1N1CrtL056gz4Aj2xMLYp 5 | 6k2DVz1UWxF40YnPsWSRHzW8OmtP0U5XLIiwrxh9G4lwuFFan+Ha346Hyjagt8pt 6 | c8S3FSRF/06J4iR9kvM6iCy9DWP44HPxQQFQ2VRN8E+TpJdevtx3F1JZ8GsawKKR 7 | beX2o++j1GMGCkeUGe9G6YBX0mD3d/Bx69gm1E2SRmdiJzEWQoZCyzIAK72YF+Qi 8 | Hi1qdzSVAgMBAAECggEABNGLSd5jHNpaf719/ssnQwdWGWj/wvLoScx+w1zDJNfB 9 | V06BxrNysNGReFjTBvtVKawi38uJk/vPbKwpQI/RK21w5oM6QaiCzQkmn6zEYI84 10 | bpuO7xwWFFDqRerhKGqmdYp5pKJyw3G6Qe+++tp5k+0J0ANXvpJVT6vVxmKPBMpe 11 | 3KkylxBqe7rNOorjYpfuLu4/z0jtz+xCOdI3y9F3Jl/FMyE6NAGCVEWKnoAK4EOv 12 | nz33jo8DUan+pSi/ssJbOqxfnkBE9yFcrytpMjTeCff/LcbHDi1gdhGn7iKc/QxE 13 | PA98yzSOZeWgR5RbBEJEQb5831VRr6Gt2b0qU9JldQKBgQDYxAbAkASMSViP5THp 14 | djk0+daExKQ4GVKMi5RI6BHQKJq75H7JWQ5zArvxL1AyEpMac0Q6w0FIxnbkiYKV 15 | tmc6kjmjbsgA+ml02nJtmfNizIf9Z9Op1dWfc3maRkiYqEl5GS0h7a2a/rtV+OC5 16 | olCwiLFy7ch0Ik/fjhTsy0fIBwKBgQDUBh0DUrrp6C+yeQZX9WIM9C7qZODZlYCU 17 | waUIibL/JPjv8zA5WBRjbvmn+QyafwjRbN+yiboeWbrdaNH7U1cyjb85O81G2SAM 18 | BK9yTiBuvRi1sk3H9KKG628Gjb93uyIN7htLcZGUYlkff5h2fYJHPpOd6lZU0bUs 19 | ZQZ6QaUfgwKBgCJTWGZh5/Z3HukaeD7qE8EJ1yiLIx4nFGVhLQgmh7uY0nfyhQlJ 20 | avpXcn+M6HwlaNoFasaLaOknVGh4Rg+DJPGnei0hO9a70LtKZFhqypnYnahJKsF4 21 | NS3c0WLWwmQ6MfhVPkpjItyqfevtT1jWFUT/QGpcsSOC03cpPrMItcM9AoGALvfj 22 | uXa8PVDYMBsrUpTjUadONVJ/lPPPdiSnoIqQgoD4PH+M8UcXzScqWxGKvzbhBzOt 23 | ImnsNwj9okq0KY6+xE4uTEl5Ifa7aK4pB5NTD/UH4khLfr4suuKwx6zi+20TEC7t 24 | EPtpmotm3tlvNuB62bl9DgB5e3SxQ9JlavPb1m0CgYEAlXchlHeH3Q1xZ/ZBJEU4 25 | 47DuDH/D7NEDrZqp3Vnp++JEmHEF9kCXhC3XEYPfvigBqYHo2sKyUBTw4co9wzDr 26 | RClkDx5XnZCsXLQkSNcmnJQ+xgmzRKZUR3wOTsDPEHA3LEIS7E8+dlfvYM15Smh4 27 | +QqKuYGhfc3XT94YGjZaUpc= 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /config/webpack.common.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const path = require('path'); 3 | const package = require('../package.json'); 4 | const CopyWebpackPlugin = require('copy-webpack-plugin'); 5 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 6 | const ExtractTextPlugin = require('extract-text-webpack-plugin'); 7 | const autoprefixer = require('autoprefixer'); 8 | 9 | const build = (() => { 10 | const timestamp = new Date().getTime(); 11 | return { 12 | name: package.name, 13 | version: package.version, 14 | timestamp: timestamp, 15 | author: package.author 16 | }; 17 | })(); 18 | 19 | const entry = { 20 | vendor: [ 21 | 'react', 22 | 'react-dom', 23 | 'core-js', 24 | 'office-ui-fabric-react' 25 | ], 26 | app: [ 27 | 'react-hot-loader/patch', 28 | './index.tsx', 29 | ], 30 | 'function-file': '../function-file/function-file.ts' 31 | }; 32 | 33 | const rules = [ 34 | { 35 | test: /\.tsx?$/, 36 | use: [ 37 | 'react-hot-loader/webpack', 38 | 'ts-loader' 39 | ], 40 | exclude: /node_modules/ 41 | }, 42 | { 43 | test: /\.css$/, 44 | use: ['style-loader', 'css-loader'] 45 | }, 46 | { 47 | test: /\.less$/, 48 | use: ['style-loader', 'css-loader', 'less-loader'] 49 | }, 50 | { 51 | test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, 52 | use: { 53 | loader: 'file-loader', 54 | query: { 55 | name: 'assets/[name].[ext]' 56 | } 57 | } 58 | } 59 | ]; 60 | 61 | const output = { 62 | path: path.resolve('dist'), 63 | publicPath: '/', 64 | filename: '[name].[hash].js', 65 | chunkFilename: '[id].[hash].chunk.js' 66 | }; 67 | 68 | const WEBPACK_PLUGINS = [ 69 | new webpack.NamedModulesPlugin(), 70 | new webpack.NoEmitOnErrorsPlugin(), 71 | new webpack.BannerPlugin({ banner: `${build.name} v.${build.version} (${build.timestamp}) © ${build.author}` }), 72 | new webpack.DefinePlugin({ 73 | ENVIRONMENT: JSON.stringify({ 74 | build: build 75 | }) 76 | }), 77 | new webpack.LoaderOptionsPlugin({ 78 | options: { 79 | postcss: [ 80 | autoprefixer({ browsers: ['Safari >= 8', 'last 2 versions'] }), 81 | ], 82 | htmlLoader: { 83 | minimize: true 84 | } 85 | } 86 | }) 87 | ]; 88 | 89 | module.exports = { 90 | context: path.resolve('./src'), 91 | entry, 92 | output, 93 | resolve: { 94 | extensions: ['.js', '.jsx', '.ts', '.tsx', '.scss', '.css', '.html'] 95 | }, 96 | module: { 97 | rules, 98 | }, 99 | optimization: { 100 | splitChunks: { 101 | chunks: 'async', 102 | minChunks: Infinity, 103 | name: 'vendor' 104 | } 105 | }, 106 | plugins: [ 107 | ...WEBPACK_PLUGINS, 108 | new ExtractTextPlugin('[name].[hash].css'), 109 | new HtmlWebpackPlugin({ 110 | title: 'outlook-addin-using-react-demo', 111 | filename: 'index.html', 112 | template: './index.html', 113 | chunks: ['app', 'vendor', 'polyfills'] 114 | }), 115 | new HtmlWebpackPlugin({ 116 | title: 'outlook-addin-using-react-demo', 117 | filename: 'function-file/function-file.html', 118 | template: '../function-file/function-file.html', 119 | chunks: ['function-file'] 120 | }), 121 | new CopyWebpackPlugin([ 122 | { 123 | from: '../assets', 124 | ignore: ['*.scss'], 125 | to: 'assets', 126 | } 127 | ]) 128 | ] 129 | }; -------------------------------------------------------------------------------- /config/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const webpack = require('webpack'); 4 | const webpackMerge = require('webpack-merge'); 5 | const commonConfig = require('./webpack.common.js'); 6 | 7 | module.exports = webpackMerge(commonConfig, { 8 | devtool: 'eval-source-map', 9 | devServer: { 10 | publicPath: '/', 11 | contentBase: path.resolve('dist'), 12 | hot: true, 13 | https: { 14 | key: fs.readFileSync('./certs/server.key'), 15 | cert: fs.readFileSync('./certs/server.crt'), 16 | cacert: fs.readFileSync('./certs/ca.crt') 17 | }, 18 | compress: true, 19 | overlay: { 20 | warnings: false, 21 | errors: true 22 | }, 23 | port: 3000, 24 | historyApiFallback: true 25 | }, 26 | plugins: [ 27 | new webpack.HotModuleReplacementPlugin() 28 | ] 29 | }); 30 | -------------------------------------------------------------------------------- /config/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const webpackMerge = require('webpack-merge'); 3 | const commonConfig = require('./webpack.common.js'); 4 | const ENV = process.env.NODE_ENV = process.env.ENV = 'production'; 5 | 6 | module.exports = webpackMerge(commonConfig, { 7 | devtool: 'source-map', 8 | 9 | performance: { 10 | hints: "warning" 11 | }, 12 | 13 | optimization: { 14 | minimize: true 15 | } 16 | }); 17 | 18 | -------------------------------------------------------------------------------- /function-file/function-file.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /function-file/function-file.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. 3 | * See LICENSE in the project root for license information. 4 | */ 5 | 6 | (() => { 7 | // The initialize function must be run each time a new page is loaded 8 | Office.initialize = () => { 9 | console.log("abc"); 10 | }; 11 | 12 | // Add any ui-less function here 13 | })(); 14 | -------------------------------------------------------------------------------- /manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 17c6a1a1-9880-4e14-8d99-47c2f421d3ca 13 | 14 | 15 | 1.0.0.0 16 | tirthGajjar 17 | en-US 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | AppDomain1 32 | AppDomain2 33 | AppDomain3 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 | 48 | 49 | 250 50 | 51 |
52 |
53 | 54 | ReadWriteItem 55 | 56 | 57 | 58 | false 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |